diff --git a/CONTIBRUTING.md b/CONTIBRUTING.md index c10b3411f2..8ee44e779e 100644 --- a/CONTIBRUTING.md +++ b/CONTIBRUTING.md @@ -59,7 +59,7 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S ### Name Conventions -The function retrieves an array of _data keys_ for **multiple** smart contract addresses if the read-in result of the last call returned `true.` Otherwise, the function will return `false` as the given addresses do not appear to be [LSP0 ERC725 Accounts](./docs/standards/universal-profile/lsp0-erc725account.md). +The function retrieves an array of _data keys_ for **multiple** smart contract addresses if the read-in result of the last call returned `true.` Otherwise, the function will return `false` as the given addresses do not appear to be [LSP0 ERC725 Accounts](./docs/standards/accounts/lsp0-erc725account.md). ### Page Metadata diff --git a/docs/contracts/_links.md b/docs/contracts/_links.md index ce86a82218..fd6261bc08 100644 --- a/docs/contracts/_links.md +++ b/docs/contracts/_links.md @@ -36,21 +36,21 @@ -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/ERC725/ERC725.md b/docs/contracts/contracts/ERC725/ERC725.md index 489649309d..d0e76e30bf 100644 --- a/docs/contracts/contracts/ERC725/ERC725.md +++ b/docs/contracts/contracts/ERC725/ERC725.md @@ -1148,21 +1148,21 @@ Reverts when trying to set `address(0)` as the contract owner when deploying the -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP0ERC725Account/LSP0ERC725Account.md b/docs/contracts/contracts/LSP0ERC725Account/LSP0ERC725Account.md index df328ebec2..b74a1505fa 100644 --- a/docs/contracts/contracts/LSP0ERC725Account/LSP0ERC725Account.md +++ b/docs/contracts/contracts/LSP0ERC725Account/LSP0ERC725Account.md @@ -1976,21 +1976,21 @@ reverts when there is no extension for the function selector being called with -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.md b/docs/contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.md index 8aa735ea41..eefb5e73dc 100644 --- a/docs/contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.md +++ b/docs/contracts/contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.md @@ -1057,21 +1057,21 @@ reverts when the plain secret produce a different hash than the secret hash orig -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP14Ownable2Step/LSP14Ownable2Step.md b/docs/contracts/contracts/LSP14Ownable2Step/LSP14Ownable2Step.md index 404efd69c4..38702f3733 100644 --- a/docs/contracts/contracts/LSP14Ownable2Step/LSP14Ownable2Step.md +++ b/docs/contracts/contracts/LSP14Ownable2Step/LSP14Ownable2Step.md @@ -569,21 +569,21 @@ Reverts when only the owner is allowed to call the function. -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP16UniversalFactory/LSP16UniversalFactory.md b/docs/contracts/contracts/LSP16UniversalFactory/LSP16UniversalFactory.md index 53c037cf2f..7f9948b4b8 100644 --- a/docs/contracts/contracts/LSP16UniversalFactory/LSP16UniversalFactory.md +++ b/docs/contracts/contracts/LSP16UniversalFactory/LSP16UniversalFactory.md @@ -471,21 +471,21 @@ Reverts when `msg.value` sent to [`deployCreate2AndInitialize(..)`](#deploycreat -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP17ContractExtension/LSP17Extendable.md b/docs/contracts/contracts/LSP17ContractExtension/LSP17Extendable.md index a69d9e9559..de2356e293 100644 --- a/docs/contracts/contracts/LSP17ContractExtension/LSP17Extendable.md +++ b/docs/contracts/contracts/LSP17ContractExtension/LSP17Extendable.md @@ -161,21 +161,21 @@ If there is an extension for the function selector being called, it calls the ex -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP17ContractExtension/LSP17Extension.md b/docs/contracts/contracts/LSP17ContractExtension/LSP17Extension.md index 764a302a12..d0967e7a61 100644 --- a/docs/contracts/contracts/LSP17ContractExtension/LSP17Extension.md +++ b/docs/contracts/contracts/LSP17ContractExtension/LSP17Extension.md @@ -153,21 +153,21 @@ Returns the original `msg.value` sent to the extendable contract. -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP17Extensions/Extension4337.md b/docs/contracts/contracts/LSP17Extensions/Extension4337.md index a525bd8eb4..8ffd254073 100644 --- a/docs/contracts/contracts/LSP17Extensions/Extension4337.md +++ b/docs/contracts/contracts/LSP17Extensions/Extension4337.md @@ -248,21 +248,21 @@ Returns the original `msg.value` sent to the extendable contract. -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP17Extensions/OnERC721ReceivedExtension.md b/docs/contracts/contracts/LSP17Extensions/OnERC721ReceivedExtension.md index 7f6f0ec9fc..9755cf239b 100644 --- a/docs/contracts/contracts/LSP17Extensions/OnERC721ReceivedExtension.md +++ b/docs/contracts/contracts/LSP17Extensions/OnERC721ReceivedExtension.md @@ -191,21 +191,21 @@ Returns the original `msg.value` sent to the extendable contract. -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP.md b/docs/contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP.md index eddb810508..1c4bb0da9e 100644 --- a/docs/contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP.md +++ b/docs/contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP.md @@ -314,21 +314,21 @@ Reverts when EOA calls the [`universalReceiver(..)`](#universalreceiver) functio -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.md b/docs/contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.md index 097f02cc3b..4e0e203335 100644 --- a/docs/contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.md +++ b/docs/contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.md @@ -271,21 +271,21 @@ Reverts when EOA calls the [`universalReceiver(..)`](#universalreceiver) functio -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP20CallVerification/LSP20CallVerification.md b/docs/contracts/contracts/LSP20CallVerification/LSP20CallVerification.md index 80c5bbc341..863dc27b6c 100644 --- a/docs/contracts/contracts/LSP20CallVerification/LSP20CallVerification.md +++ b/docs/contracts/contracts/LSP20CallVerification/LSP20CallVerification.md @@ -97,21 +97,21 @@ function _revertWithLSP20DefaultError( -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP23LinkedContractsDeployment/IPostDeploymentModule.md b/docs/contracts/contracts/LSP23LinkedContractsDeployment/IPostDeploymentModule.md index 2444ed75a7..a849dde009 100644 --- a/docs/contracts/contracts/LSP23LinkedContractsDeployment/IPostDeploymentModule.md +++ b/docs/contracts/contracts/LSP23LinkedContractsDeployment/IPostDeploymentModule.md @@ -90,21 +90,21 @@ Executes post-deployment logic for the primary and secondary contracts. -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP23LinkedContractsDeployment/LSP23LinkedContractsFactory.md b/docs/contracts/contracts/LSP23LinkedContractsDeployment/LSP23LinkedContractsFactory.md index b0a4d570cc..c8fb6f8468 100644 --- a/docs/contracts/contracts/LSP23LinkedContractsDeployment/LSP23LinkedContractsFactory.md +++ b/docs/contracts/contracts/LSP23LinkedContractsDeployment/LSP23LinkedContractsFactory.md @@ -414,21 +414,21 @@ Reverts when the deployment & intialisation of the secondary contract has failed -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP23LinkedContractsFactory/IPostDeploymentModule.md b/docs/contracts/contracts/LSP23LinkedContractsFactory/IPostDeploymentModule.md index 0a7273b6ea..3a90f914f9 100644 --- a/docs/contracts/contracts/LSP23LinkedContractsFactory/IPostDeploymentModule.md +++ b/docs/contracts/contracts/LSP23LinkedContractsFactory/IPostDeploymentModule.md @@ -89,21 +89,21 @@ Executes post-deployment logic for the primary and secondary contracts. -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP23LinkedContractsFactory/LSP23LinkedContractsFactory.md b/docs/contracts/contracts/LSP23LinkedContractsFactory/LSP23LinkedContractsFactory.md index 4f398fee46..cc815d3f98 100644 --- a/docs/contracts/contracts/LSP23LinkedContractsFactory/LSP23LinkedContractsFactory.md +++ b/docs/contracts/contracts/LSP23LinkedContractsFactory/LSP23LinkedContractsFactory.md @@ -439,21 +439,21 @@ Reverts when the deployment & intialization of the secondary contract has failed -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP25ExecuteRelayCall/LSP25MultiChannelNonce.md b/docs/contracts/contracts/LSP25ExecuteRelayCall/LSP25MultiChannelNonce.md index d7bbc093fa..773a9dbf73 100644 --- a/docs/contracts/contracts/LSP25ExecuteRelayCall/LSP25MultiChannelNonce.md +++ b/docs/contracts/contracts/LSP25ExecuteRelayCall/LSP25MultiChannelNonce.md @@ -183,21 +183,21 @@ The "idx" is a 256bits (unsigned) integer, where: -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP4DigitalAssetMetadata/LSP4Compatibility.md b/docs/contracts/contracts/LSP4DigitalAssetMetadata/LSP4Compatibility.md index eaff5e1b61..66c24febc3 100644 --- a/docs/contracts/contracts/LSP4DigitalAssetMetadata/LSP4Compatibility.md +++ b/docs/contracts/contracts/LSP4DigitalAssetMetadata/LSP4Compatibility.md @@ -576,21 +576,21 @@ Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#set -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP4DigitalAssetMetadata/LSP4DigitalAssetMetadata.md b/docs/contracts/contracts/LSP4DigitalAssetMetadata/LSP4DigitalAssetMetadata.md index 753c6c92a7..d9d6f56a69 100644 --- a/docs/contracts/contracts/LSP4DigitalAssetMetadata/LSP4DigitalAssetMetadata.md +++ b/docs/contracts/contracts/LSP4DigitalAssetMetadata/LSP4DigitalAssetMetadata.md @@ -610,21 +610,21 @@ Reverts when trying to set `address(0)` as the contract owner when deploying the -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP6KeyManager/LSP6KeyManager.md b/docs/contracts/contracts/LSP6KeyManager/LSP6KeyManager.md index 679705159e..85613ad425 100644 --- a/docs/contracts/contracts/LSP6KeyManager/LSP6KeyManager.md +++ b/docs/contracts/contracts/LSP6KeyManager/LSP6KeyManager.md @@ -176,7 +176,7 @@ Same as [`execute`](#execute) but execute a batch of payloads (abi-encoded funct :::tip Hint -If you are looking to learn how to sign and execute relay transactions via the Key Manager, see our Javascript step by step guide [_"Execute Relay Transactions"_](../../../learn/universal-profile/key-manager/execute-relay-transactions.md). See the LSP6 Standard page for more details on how to [generate a valid signature for Execute Relay Call](../../../standards/universal-profile/lsp6-key-manager.md#how-to-sign-relay-transactions). +If you are looking to learn how to sign and execute relay transactions via the Key Manager, see our Javascript step by step guide [_"Execute Relay Transactions"_](../../../learn/universal-profile/key-manager/execute-relay-transactions.md). See the LSP6 Standard page for more details on how to [generate a valid signature for Execute Relay Call](/standards/access-control/lsp6-key-manager.md#how-to-sign-relay-transactions). ::: @@ -2005,21 +2005,21 @@ Reverts when the period to execute the relay call has expired. -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md b/docs/contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md index 7568c86905..4fabf13e16 100644 --- a/docs/contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md +++ b/docs/contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md @@ -1952,21 +1952,21 @@ Reverts when trying to set `address(0)` as the contract owner when deploying the -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md b/docs/contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md index b36c558f2f..45152088eb 100644 --- a/docs/contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md +++ b/docs/contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md @@ -2240,21 +2240,21 @@ Reverts when trying to set `address(0)` as the contract owner when deploying the -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/LSP9Vault/LSP9Vault.md b/docs/contracts/contracts/LSP9Vault/LSP9Vault.md index 65b8a2543d..ded563c24c 100644 --- a/docs/contracts/contracts/LSP9Vault/LSP9Vault.md +++ b/docs/contracts/contracts/LSP9Vault/LSP9Vault.md @@ -1843,21 +1843,21 @@ Reverts when only the owner is allowed to call the function. -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/contracts/UniversalProfile/UniversalProfile.md b/docs/contracts/contracts/UniversalProfile/UniversalProfile.md index 72371a9ab7..289bba5c56 100644 --- a/docs/contracts/contracts/UniversalProfile/UniversalProfile.md +++ b/docs/contracts/contracts/UniversalProfile/UniversalProfile.md @@ -1905,21 +1905,21 @@ reverts when there is no extension for the function selector being called with -[ERC725]: https://docs.lukso.tech/standards/lsp-background/erc725 -[UniversalProfile]: https://docs.lukso.tech/standards/universal-profile/introduction -[LSP0ERC725Account]: https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account -[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver -[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver-delegate -[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/generic-standards/lsp2-json-schema +[ERC725]: https://docs.lukso.tech/standards/erc725 +[UniversalProfile]: https://docs.lukso.tech/standards/accounts/introduction +[LSP0ERC725Account]: https://docs.lukso.tech/standards/accounts/lsp0-erc725account +[LSP1UniversalReceiver]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver +[LSP1UniversalReceiverDelegate]: https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver-delegate +[LSP2ERC725YJSONSchema]: https://docs.lukso.tech/standards/metadata/lsp2-json-schema [LSP4DigitalAssetMetadata]: https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata -[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp5-received-assets -[LSP6KeyManager]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[LSP5ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp5-received-assets +[LSP6KeyManager]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [LSP7DigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP7-Digital-Asset [LSP8IdentifiableDigitalAsset]: https://docs.lukso.tech/standards/tokens/LSP8-Identifiable-Digital-Asset -[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/universal-profile/lsp10-received-vaults -[LSP14Ownable2Step]: https://docs.lukso.tech/standards/generic-standards/lsp14-ownable-2-step -[LSP17ContractExtension]: https://docs.lukso.tech/standards/generic-standards/lsp17-contract-extension -[LSP20CallVerification]: https://docs.lukso.tech/standards/generic-standards/lsp20-call-verification +[LSP10ReceivedVaults]: https://docs.lukso.tech/standards/metadata/lsp10-received-vaults +[LSP14Ownable2Step]: https://docs.lukso.tech/standards/access-control/lsp14-ownable-2-step +[LSP17ContractExtension]: https://docs.lukso.tech/standards/accounts/lsp17-contract-extension +[LSP20CallVerification]: https://docs.lukso.tech/standards/accounts/lsp20-call-verification diff --git a/docs/contracts/deployed-contracts.md b/docs/contracts/deployed-contracts.md index 3852670346..5edb415fa8 100644 --- a/docs/contracts/deployed-contracts.md +++ b/docs/contracts/deployed-contracts.md @@ -27,7 +27,7 @@ Below are the base implementation contracts deployed on mainnet. They contain all the core logic of the **Universal Profile** 🆙, **LSP6 Key Manager** 🔐 and **LSP1 Universal Receiver Delegate** 📣. Proxies pointing to these implementations must be initialized via the `initialize(...)` function to work. -The Universal Profile and Key Manager contracts of each users are deployed as EIP1167 minimal proxy, with their bytecode pointing to these implementation contracts. Finally, each Universal Profile has its **default** Universal Receiver Delegate contract linked to its 🆙 contract via the [`LSP1UniversalReceiverDelegate`](../standards/generic-standards/lsp1-universal-receiver-delegate.md#lsp1universalreceiverdelegate-singleton) data key. +The Universal Profile and Key Manager contracts of each users are deployed as EIP1167 minimal proxy, with their bytecode pointing to these implementation contracts. Finally, each Universal Profile has its **default** Universal Receiver Delegate contract linked to its 🆙 contract via the [`LSP1UniversalReceiverDelegate`](/standards/accounts/lsp1-universal-receiver-delegate.md#lsp1universalreceiverdelegate-singleton) data key. You can inspect these details via our [_erc725-inspect_](https://erc725-inspect.lukso.tech/inspector?address=0x0F4180da178ed1C71398a57ca8Cb177F69591f1f&network=mainnet) tool. diff --git a/docs/contracts/overview/DigitalAssets.md b/docs/contracts/overview/DigitalAssets.md index 3893eb63b9..942786b246 100644 --- a/docs/contracts/overview/DigitalAssets.md +++ b/docs/contracts/overview/DigitalAssets.md @@ -8,7 +8,7 @@ import TabItem from '@theme/TabItem'; # Digital Assets -The **Digital Asset (Token and NFT 2.0)** contracts are the newest advanced version of the existing token standards. They come with many features that enhance the security and the overall user experience and compatibility with [ERC725Accounts](../../standards/universal-profile/lsp0-erc725account.md) and [Universal Receivers](../../standards/generic-standards/lsp1-universal-receiver.md). +The **Digital Asset (Token and NFT 2.0)** contracts are the newest advanced version of the existing token standards. They come with many features that enhance the security and the overall user experience and compatibility with [ERC725Accounts](/standards/accounts/lsp0-erc725account.md) and [Universal Receivers](/standards/accounts/lsp1-universal-receiver.md). ## Comparisons with ERC20 / ERC721 @@ -131,7 +131,7 @@ A **bytes32** value is used for tokenId to allow many uses of token identificati The function [`setDataBatchForTokenIds(...)`](../../contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md#setdatabatchfortokenids) can be used to set multiple data key-value pairs at once for one or multiple tokenIds. -This function is flexible enough to enable to set one or multiple [data key-value](../../standards/lsp-background/erc725).md#erc725y-generic-data-keyvalue-store) pairs for: +This function is flexible enough to enable to set one or multiple [data key-value](/standards/erc725).md#erc725y-generic-data-keyvalue-store) pairs for: #### case 1: a single tokenId @@ -343,7 +343,7 @@ async function setMultipleDataForSingleTokenId( ### Checking if the Metadata of a tokenId changed -Since LSP8 uses [ERC725Y](../../standards/lsp-background/erc725#erc725y-generic-data-keyvalue-store) under the hood, the URI pointing to the metadata of a specific tokenId can be changed inside the ERC725Y storage of the LSP8 contract. +Since LSP8 uses [ERC725Y](/standards/erc725#erc725y-generic-data-keyvalue-store) under the hood, the URI pointing to the metadata of a specific tokenId can be changed inside the ERC725Y storage of the LSP8 contract. We have seen in the previous section [**how to set metadata for one or multiple tokenIds**](#setting-metadata-for-one-or-multiple-tokenids). diff --git a/docs/contracts/overview/KeyManager.md b/docs/contracts/overview/KeyManager.md index 205cd0b490..af3d4486cd 100644 --- a/docs/contracts/overview/KeyManager.md +++ b/docs/contracts/overview/KeyManager.md @@ -29,15 +29,15 @@ If controller has `SETDATA` permission but has no `AllowedERC725YDataKeys`, cont ::: -Key Manager allows for restricting controller addresses to change only specific or dynamic data keys. In order to achieve such functionallity one could encode a set of data keys to [`bytes[CompactBytesArray]`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-2-ERC725YJSONSchema.md#bytescompactbytesarray), and store them under the [Allowed ERC725Y Data Keys](../../standards/universal-profile/lsp6-key-manager.md#allowed-erc725y-data-keys) data key. +Key Manager allows for restricting controller addresses to change only specific or dynamic data keys. In order to achieve such functionallity one could encode a set of data keys to [`bytes[CompactBytesArray]`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-2-ERC725YJSONSchema.md#bytescompactbytesarray), and store them under the [Allowed ERC725Y Data Keys](/standards/access-control/lsp6-key-manager.md#allowed-erc725y-data-keys) data key. #### Specific Data Keys -A _Specific Data Key_ must have the length of 32 bytes. Setting a _Specific Data Key_ in the [Allowed ERC725Y Data Keys](../../standards/universal-profile/lsp6-key-manager.md#allowed-erc725y-data-keys) will allow the controller to only modify the data value of that _Specific Data Key_. +A _Specific Data Key_ must have the length of 32 bytes. Setting a _Specific Data Key_ in the [Allowed ERC725Y Data Keys](/standards/access-control/lsp6-key-manager.md#allowed-erc725y-data-keys) will allow the controller to only modify the data value of that _Specific Data Key_. #### Dynamic Data Keys -A _Dynamic Data Key_ can have any length between 0 and 32 (except 0 and 32). Setting a _Dynamic Data Key_ in the [Allowed ERC725Y Data Keys](../../standards/universal-profile/lsp6-key-manager.md#allowed-erc725y-data-keys) will allow the controller to modify the data value of any data key that starts exactly with that _Dynamic Data Key_. +A _Dynamic Data Key_ can have any length between 0 and 32 (except 0 and 32). Setting a _Dynamic Data Key_ in the [Allowed ERC725Y Data Keys](/standards/access-control/lsp6-key-manager.md#allowed-erc725y-data-keys) will allow the controller to modify the data value of any data key that starts exactly with that _Dynamic Data Key_. Example: @@ -59,7 +59,7 @@ If controller has `CALL` permission but has no `AllowedCalls`, controller will n ::: -Key Manager allows for restricting controller addresses to be able to call specific functions on specific addresses which should be of a specific standard. In order to achieve such functionallity one could encode a set of type calls, addresses, standards and functions to [`bytes[CompactBytesArray]`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-2-ERC725YJSONSchema.md#bytesncompactbytesarray), and store them under the [Allowed Calls](../../standards/universal-profile/lsp6-key-manager.md#allowed-calls) data key. +Key Manager allows for restricting controller addresses to be able to call specific functions on specific addresses which should be of a specific standard. In order to achieve such functionallity one could encode a set of type calls, addresses, standards and functions to [`bytes[CompactBytesArray]`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-2-ERC725YJSONSchema.md#bytesncompactbytesarray), and store them under the [Allowed Calls](../../standards/access-control/lsp6-key-manager.md#allowed-calls) data key. _E.g._ diff --git a/docs/contracts/overview/LSP1Delegate.md b/docs/contracts/overview/LSP1Delegate.md index 598e584791..9dc6245770 100644 --- a/docs/contracts/overview/LSP1Delegate.md +++ b/docs/contracts/overview/LSP1Delegate.md @@ -15,6 +15,6 @@ There are two default implementations of the LSP1 Delegate contracts available, The Universal Profile implementation allows for attaching multiple instances of Universal Receiver Delegate to it. This is due to LSP1 Routing. You could have a single General Purpose Unviersal Receiver Delegate and multiple instances of Specific Unviersal Receiver Delegate. -A General Purpose Universal Receiver Delegate has its address stored under the [LSP1UniversalReceiverDelegate Singleton](../../standards//generic-standards/lsp1-universal-receiver-delegate.md#lsp1universalreceiverdelegate-singleton) data key. This contract will be called on any LSP1 hook, meaning that it can potentially react on any [TypeID](../type-ids.md#universal-receiver-type-ids). +A General Purpose Universal Receiver Delegate has its address stored under the [LSP1UniversalReceiverDelegate Singleton](/standards/accounts/lsp1-universal-receiver-delegate.md#lsp1universalreceiverdelegate-singleton) data key. This contract will be called on any LSP1 hook, meaning that it can potentially react on any [TypeID](../type-ids.md#universal-receiver-type-ids). -A Specific Universal Receiver Delegate has its address stored under the [LSP1UniversalReceiverDelegate Mapping](../../standards//generic-standards/lsp1-universal-receiver-delegate.md#lsp1universalreceiverdelegate-mapping) data key. This contract will be called on specific LSP1 hook, depending on the [TypeID](../type-ids.md#universal-receiver-type-ids) that was passed as a parameter in the hook, meaning that it only reacts on a single specific [TypeID](../type-ids.md#universal-receiver-type-ids). +A Specific Universal Receiver Delegate has its address stored under the [LSP1UniversalReceiverDelegate Mapping](/standards/accounts/lsp1-universal-receiver-delegate.md#lsp1universalreceiverdelegate-mapping) data key. This contract will be called on specific LSP1 hook, depending on the [TypeID](../type-ids.md#universal-receiver-type-ids) that was passed as a parameter in the hook, meaning that it only reacts on a single specific [TypeID](../type-ids.md#universal-receiver-type-ids). diff --git a/docs/contracts/overview/UniversalProfile.md b/docs/contracts/overview/UniversalProfile.md index a2d76d0533..a00f4b213f 100644 --- a/docs/contracts/overview/UniversalProfile.md +++ b/docs/contracts/overview/UniversalProfile.md @@ -6,7 +6,7 @@ sidebar_position: 1 The `UniversalProfile.sol` smart contract is a combination of two LSP standards: -- **[LSP0-ERC725Account Standard](../../standards/universal-profile/lsp0-erc725account)** that also contains some LSP3Profile metadata, giving a "face and uniqueness" to the smart contract based account. +- **[LSP0-ERC725Account Standard](/standards/accounts/lsp0-erc725account)** that also contains some LSP3Profile metadata, giving a "face and uniqueness" to the smart contract based account. - **[LSP3-UniversalProfile-Metadata Standard](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-3-UniversalProfile-Metadata.md)** The LSP3 Profile Metadata enables to give a "face" to the smart contract based account, making it distinguishable and unique from others Universal Profiles. @@ -24,7 +24,7 @@ A `UniversalProfile` has all the basic functionalities of an _Externally Owned A All ownable functions such as [`execute(..)`](../contracts/UniversalProfile.md#execute), [`executeBatch(..)`](../contracts/UniversalProfile.md#executebatch), [`setData(..)`](../contracts/UniversalProfile.md#setdata), [`setDataBatch(..)`](../contracts/UniversalProfile.md#setdatabatch), [`transferOwnership(..)`](../contracts/UniversalProfile.md#transferownership), and [`renounceOwnership(..)`](../contracts/UniversalProfile.md#renounceownership) can be called by the owner -The contract also includes the [LSP20-CallVerification](../../standards/universal-profile/lsp0-erc725account.md#lsp20---call-verification) at its core. Meaning if the contract is owned by another contract, LSP20 enables to interact with the contract directly without having to resolve through its owner first. This allows seamless integrations with other contracts, protocols and dApps, as the contract can be called directly, making the developer experience easier. +The contract also includes the [LSP20-CallVerification](/standards/accounts/lsp0-erc725account.md#lsp20---call-verification) at its core. Meaning if the contract is owned by another contract, LSP20 enables to interact with the contract directly without having to resolve through its owner first. This allows seamless integrations with other contracts, protocols and dApps, as the contract can be called directly, making the developer experience easier. To illustrate, if another address than the owner calls the [`execute(..)`](../contracts/UniversalProfile.md#execute) function, the account contract will: @@ -76,4 +76,4 @@ You can do so using the [`setData(bytes32,bytes)`](../contracts/UniversalProfile ### Updating your `LSP3Profile` metadata. -The [`LSP3Profile`](../../standards/universal-profile/lsp3-profile-metadata.md#lsp3profile) data key has a special meaning. It enables you to edit your profile details +The [`LSP3Profile`](/standards/metadata/lsp3-profile-metadata.md#lsp3profile) data key has a special meaning. It enables you to edit your profile details diff --git a/docs/faq/onboarding/lukso-standards.md b/docs/faq/onboarding/lukso-standards.md index dadebbd661..841508c480 100644 --- a/docs/faq/onboarding/lukso-standards.md +++ b/docs/faq/onboarding/lukso-standards.md @@ -8,24 +8,24 @@ description: 'LUKSO Standard Proposals (LSPs) overview: main features of LSPs, t ## What are LUKSO Standard Proposals? -LUKSO Standard Proposals, often abbreviated as [LSPs](../../standards/introduction.md), serve as the building blocks that can be used to create a wide range of features and possibilities for a new creative economy of blockchain accounts. +LUKSO Standard Proposals, often abbreviated as [LSPs](/standards/introduction.md), serve as the building blocks that can be used to create a wide range of features and possibilities for a new creative economy of blockchain accounts. With LSPs, the mission is to have standards that facilitate using tools that abstract the blockchain complexity, effectively minimizing the technical problems users may encounter. The goal is to **make blockchain technology as user-friendly and accessible** as standard Web 2.0 technologies. This ease of use paves the way for broader acceptance and integration of blockchain systems in everyday digital interactions. ## Who can utilize LUKSO Standard Proposals? -[LSPs](../../standards/introduction.md) are a public good and are entirely open source. They can be implemented directly on any EVM blockchain. While LSPs are implemented in Solidity by default, LUKSO ensures that the standardizations are kept platform-independent and can be rewritten in other languages for other blockchain architecture. +[LSPs](/standards/introduction.md) are a public good and are entirely open source. They can be implemented directly on any EVM blockchain. While LSPs are implemented in Solidity by default, LUKSO ensures that the standardizations are kept platform-independent and can be rewritten in other languages for other blockchain architecture. ## What are the main features of LSPs? -- Tokens and NFTs get **extensible, standardized, and exchangeable** storage through a key-value scheme for any metadata or attached files using [LSP4](../../standards/tokens/LSP4-Digital-Asset-Metadata). -- All contracts can also have **native rights management** and **permissions handling** by using [LSP6](../../standards/universal-profile/lsp6-key-manager). -- Assets can be **anchored** directly to the blockchain **account's storage** using [LSP1](../../standards/generic-standards/lsp1-universal-receiver), abandoning complex data fetching. +- Tokens and NFTs get **extensible, standardized, and exchangeable** storage through a key-value scheme for any metadata or attached files using [LSP4](/standards/tokens/LSP4-Digital-Asset-Metadata). +- All contracts can also have **native rights management** and **permissions handling** by using [LSP6](/standards/access-control/lsp6-key-manager). +- Assets can be **anchored** directly to the blockchain **account's storage** using [LSP1](/standards/accounts/lsp1-universal-receiver), abandoning complex data fetching. - Token IDs have an increased size and can map any serial number (for digital or physical products) on-chain, which also allows NFC integration. - Developers and users can safely utilize **events from asset contracts**, regulate allowlists and blocklists, customize UI and app workflows, or create consensus for asset transfers using LSP1 Delegate. -- Assets have **built-in security for sending assets** to accounts without recovery, utiliszing account abstraction with their force parameter in [LSP7](../../standards/tokens/LSP7-Digital-Asset) and [LSP8](../../standards/tokens/LSP8-Identifiable-Digital-Asset). -- Attached data can always be verified through hash integration in the [LSP2](../../standards/generic-standards/lsp2-json-schema) schema. -- Assets can be **organized and managed in vaults** using [LSP9](../../standards/universal-profile/lsp9-vault). Here, multiple services and games can have permissioned access for updating the asset data of user accounts. +- Assets have **built-in security for sending assets** to accounts without recovery, utiliszing account abstraction with their force parameter in [LSP7](/standards/tokens/LSP7-Digital-Asset) and [LSP8](/standards/tokens/LSP8-Identifiable-Digital-Asset). +- Attached data can always be verified through hash integration in the [LSP2](/standards/metadata/lsp2-json-schema) schema. +- Assets can be **organized and managed in vaults** using [LSP9](/standards/accounts/lsp9-vault). Here, multiple services and games can have permissioned access for updating the asset data of user accounts. - For NFTs, individual token IDs from a collection can have **separate metadata**, upgrades, creators, and behaviors, instead of just being limited to the logic of the mint contract. ## What's the recommended language for LSP development? @@ -42,11 +42,11 @@ LUKSO has quite the advantage with first implementation as the whole user base w ## How many pictures or datasets can be added to NFTs 2.0? -Thanks to the LSP4-DigitalAsset-Metadata standard that is included in the [LSP7](../../standards/tokens/LSP7-Digital-Asset) Token and [LSP8](../../standards/tokens/LSP8-Identifiable-Digital-Asset) NFT standards, **assets can hold unlimited metadata** including images, videos, gifs, and text. +Thanks to the LSP4-DigitalAsset-Metadata standard that is included in the [LSP7](/standards/tokens/LSP7-Digital-Asset) Token and [LSP8](/standards/tokens/LSP8-Identifiable-Digital-Asset) NFT standards, **assets can hold unlimited metadata** including images, videos, gifs, and text. ## When using the LSP9 Vault, is the NFT stored on-chain? -Yes, the [LSP9 Vault](../../standards/universal-profile/lsp9-vault.md) is a subcontract of a UP. While the NFT contract is stored on-chain, some of its metadata will rely on a **storage solution link** that is specified in its **JSON schema**. This link can point to anything including centralized and decentralized storage solutions. +Yes, the [LSP9 Vault](/standards/accounts/lsp9-vault.md) is a subcontract of a UP. While the NFT contract is stored on-chain, some of its metadata will rely on a **storage solution link** that is specified in its **JSON schema**. This link can point to anything including centralized and decentralized storage solutions. ## Do LSPs specify a storage solution for contract data? @@ -56,25 +56,25 @@ No, LSPs do not require the use of any specific data solution. Any content link [ERC721](https://eips.ethereum.org/EIPS/eip-721) and [ERC1155](https://eips.ethereum.org/EIPS/eip-1155) are widely used Non-Fungible Token (NFT) standards on Ethereum. While they set off NFT adoption and were the first of their kind, they have certain limitations. Namely these standards lack metadata for the asset, limit the NFT's storage and attachments, and restrict potential interaction due to them not being updatable and having limited EOA management. -LUKSO's NFT standards, [LSP7](../../standards/tokens/LSP7-Digital-Asset.md) and [LSP8](../../standards/tokens/LSP8-Identifiable-Digital-Asset.md), are designed to overcome these limitations. These standards enhance NFT's interaction potential. For instance, when an asset is transferred, the sender and recipient are notified. You can also attach multiple owners, add various media content, and update its content over time. +LUKSO's NFT standards, [LSP7](/standards/tokens/LSP7-Digital-Asset.md) and [LSP8](/standards/tokens/LSP8-Identifiable-Digital-Asset.md), are designed to overcome these limitations. These standards enhance NFT's interaction potential. For instance, when an asset is transferred, the sender and recipient are notified. You can also attach multiple owners, add various media content, and update its content over time. -Furthermore, LSP7 and LSP8 standardize the on-chain information available for these assets, thereby enhancing their traceability and enabling authenticity checks for NFTs. While ERC721 and ERC1155 provide a foundation for NFTs, LUKSO's LSP7 and LSP8 standards offer more sophisticated features and capabilities, catering to a broader range of use cases and improving the overall user experience. For more detailed information, check out the [LSP7](../../standards/tokens/LSP7-Digital-Asset.md) and [LSP8](../../standards/tokens/LSP8-Identifiable-Digital-Asset) documentation. +Furthermore, LSP7 and LSP8 standardize the on-chain information available for these assets, thereby enhancing their traceability and enabling authenticity checks for NFTs. While ERC721 and ERC1155 provide a foundation for NFTs, LUKSO's LSP7 and LSP8 standards offer more sophisticated features and capabilities, catering to a broader range of use cases and improving the overall user experience. For more detailed information, check out the [LSP7](/standards/tokens/LSP7-Digital-Asset.md) and [LSP8](/standards/tokens/LSP8-Identifiable-Digital-Asset) documentation. ## How can I create an updatable NFT on LUKSO? -On the LUKSO network, NFTs can be made **updatable** with the [LSP8](../../standards/tokens/LSP8-Identifiable-Digital-Asset) standard. While the underlying technology of the LUKSO network is similar to that of Ethereum, it differentiates itself through the use of these standards. The commonly used NFT standards on Ethereum, ERC721, and ERC1155 do not fully support updatable metadata for NFTs. This is a limitation that LUKSO's LSP8 standard seeks to address. +On the LUKSO network, NFTs can be made **updatable** with the [LSP8](/standards/tokens/LSP8-Identifiable-Digital-Asset) standard. While the underlying technology of the LUKSO network is similar to that of Ethereum, it differentiates itself through the use of these standards. The commonly used NFT standards on Ethereum, ERC721, and ERC1155 do not fully support updatable metadata for NFTs. This is a limitation that LUKSO's LSP8 standard seeks to address. -The LSP8 standard introduces a **standardized key-value store**, allowing metadata to be stored and updated over time. This makes NFTs on the LUKSO network dynamic, as their information can be altered after they are minted. For more detailed information please refer to the [LSP8](../../standards/tokens/LSP8-Identifiable-Digital-Asset) documentation. +The LSP8 standard introduces a **standardized key-value store**, allowing metadata to be stored and updated over time. This makes NFTs on the LUKSO network dynamic, as their information can be altered after they are minted. For more detailed information please refer to the [LSP8](/standards/tokens/LSP8-Identifiable-Digital-Asset) documentation. ## How can I create a phygital asset on LUKSO? -Creating a hybrid between a physical and a digital asset on LUKSO involves using the [LSP7](../../standards/tokens/LSP7-Digital-Asset) or [LSP8](../../standards/tokens/LSP8-Identifiable-Digital-Asset) token standards. These standards offer a **flexible and updatable key-value store** for the data of the digital half on the blockchain to carry and update relevant information related to its physical counterpart. The managing instance of the token can then update information about the asset's physical aspect dynamically. +Creating a hybrid between a physical and a digital asset on LUKSO involves using the [LSP7](/standards/tokens/LSP7-Digital-Asset) or [LSP8](/standards/tokens/LSP8-Identifiable-Digital-Asset) token standards. These standards offer a **flexible and updatable key-value store** for the data of the digital half on the blockchain to carry and update relevant information related to its physical counterpart. The managing instance of the token can then update information about the asset's physical aspect dynamically. ## How are asset creators verified using LSPs? In the blockchain world, verifying the creator of digital assets is crucial to prevent scams and ensure authenticity. There are two primary LSP standards for creator verification: -- [LSP12 Issued Assets](../../standards/universal-profile/lsp12-issued-assets/) -- and [LSP4](../../contracts/contracts/LSP4DigitalAssetMetadata/) having a [Creators List](../../standards/tokens/LSP4-Digital-Asset-Metadata/#lsp4creators) +- [LSP12 Issued Assets](/standards/metadata/lsp12-issued-assets/) +- and [LSP4](../../contracts/contracts/LSP4DigitalAssetMetadata/) having a [Creators List](/standards/tokens/LSP4-Digital-Asset-Metadata/#lsp4creators) -During the creation of an asset, Universal Profiles can be referenced as [LSP4Creators](../../standards/tokens/LSP4-Digital-Asset-Metadata/#lsp4creators). However, to verify the creator, these profiles must also link to the asset on their [ERC725Y data storage](../../standards/lsp-background/erc725.md#erc725y-data-representation) using the [LSP12 Issued Assets](../../standards/universal-profile/lsp12-issued-assets/) array. The cross-check ensures that creators get the recognition they deserve and users can trust the authenticity of assets. Platforms can then check if the asset is referenced on the Universal Profile, preventing impersonation and spam. +During the creation of an asset, Universal Profiles can be referenced as [LSP4Creators](/standards/tokens/LSP4-Digital-Asset-Metadata/#lsp4creators). However, to verify the creator, these profiles must also link to the asset on their [ERC725Y data storage](/standards/erc725.md#erc725y-data-representation) using the [LSP12 Issued Assets](/standards/metadata/lsp12-issued-assets/) array. The cross-check ensures that creators get the recognition they deserve and users can trust the authenticity of assets. Platforms can then check if the asset is referenced on the Universal Profile, preventing impersonation and spam. diff --git a/docs/learn/concepts.md b/docs/learn/concepts.md index 4a157a9041..022be0400c 100644 --- a/docs/learn/concepts.md +++ b/docs/learn/concepts.md @@ -18,10 +18,10 @@ Highlight any word and click `Ask Cookbook` in the Navbar for its definition. | Topic | TL;DR | | -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Controllers | Controllers are like little programs that are given specific permissions to do things to and with your Universal Profile. | -| [Key Manager](../standards/universal-profile/lsp6-key-manager.md) | The Key Manager is essentially a place where you can manage permissions that other _things_ have on your Universal Profile. _Things_ could be other people's profiles, dapps, extensions....anything. | -| [ERC725X](../standards/generic-standards/lsp2-json-schema.md) | ERC725X is a standard that defines how your Universal Profile works and how it can be used to manage your online identity and assets. It's like a set of rules that everyone agrees on, making it easier for different applications and platforms to understand and interact with your profile. | -| [ERC725Y](../standards/lsp-background/erc725#erc725x) | ERC725Y is the basic tool that lets you store information, while LSP2 is the set of rules that makes sure everyone stores and retrieves this information in an organized and understandable way. | +| [Key Manager](/standards/access-control/lsp6-key-manager.md) | The Key Manager is essentially a place where you can manage permissions that other _things_ have on your Universal Profile. _Things_ could be other people's profiles, dapps, extensions....anything. | +| [ERC725X](/standards/metadata/lsp2-json-schema.md) | ERC725X is a standard that defines how your Universal Profile works and how it can be used to manage your online identity and assets. It's like a set of rules that everyone agrees on, making it easier for different applications and platforms to understand and interact with your profile. | +| [ERC725Y](/standards/erc725#erc725x) | ERC725Y is the basic tool that lets you store information, while LSP2 is the set of rules that makes sure everyone stores and retrieves this information in an organized and understandable way. | | [LYXt](../../docs/faq/lukso/general-information.md#whats-the-difference-between-lyxt-lyxe-and-lyx) | LYXt is the token for developers to use on our testnet. It can always be acquired by anyone for free. | | [LYXe](../../docs/faq/lukso/general-information.md#whats-the-difference-between-lyxt-lyxe-and-lyx) | LYXe is the token that was deployed on Ethereum before LUKSO Mainnet was launched. It allowed people to invest in LUKSO pre-launch. | -| [Metadata](../standards/universal-profile/lsp3-profile-metadata.md) | This typically refers to the additional data that is stored against a token or NFT. The difference on LUKSO is it can be extended.

For example, imagine you've bought a house and have the deed as an NFT on LUKSO. Well now, as rennovations are carried out, they can be continually added to the NFT for history. | +| [Metadata](/standards/metadata/lsp3-profile-metadata.md) | This typically refers to the additional data that is stored against a token or NFT. The difference on LUKSO is it can be extended.

For example, imagine you've bought a house and have the deed as an NFT on LUKSO. Well now, as rennovations are carried out, they can be continually added to the NFT for history. | | Account Abstraction | Account abstraction is abstracting away smart contract execution from storing funds. With a smart contract account, you can program it to do all sorts of things. You can set up automatic payments, create multi-signature wallets that require multiple people to approve transactions, or even add security features like daily spending limits. It's like having a customizable, programmable bank account on the blockchain. | diff --git a/docs/learn/digital-assets/metadata-management/metadata-preparation.md b/docs/learn/digital-assets/metadata-management/metadata-preparation.md index 4c17ae96c8..5192b3c0fe 100644 --- a/docs/learn/digital-assets/metadata-management/metadata-preparation.md +++ b/docs/learn/digital-assets/metadata-management/metadata-preparation.md @@ -8,7 +8,7 @@ description: Learn how to prepare and use assets for LUKSO Universal Profiles an :::info LSP4 Metadata -When creating or editing Universal Profiles or Digital Assets, you will first need to upload assets such as images, icons, videos, etc. These assets can then be linked within the [Metadata JSON File](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md) that will be attached to the smart contract. +When creating or editing Universal Profiles or Digital Assets, you will first need to upload assets such as images, icons, videos, etc. These assets can then be linked within the [Metadata JSON File](/standards/tokens/LSP4-Digital-Asset-Metadata.md) that will be attached to the smart contract. ::: @@ -102,7 +102,7 @@ After uploading the media files, you can attach their links to a JSON File in th -The JSON content is then used as input for encoding the metadata according to the [LSP4](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md#lsp4---digital-asset-metadata) standard. After you filled your metadata file with content, upload it to a preferred storage solution. +The JSON content is then used as input for encoding the metadata according to the [LSP4](/standards/tokens/LSP4-Digital-Asset-Metadata.md#lsp4---digital-asset-metadata) standard. After you filled your metadata file with content, upload it to a preferred storage solution. :::info Data Verification @@ -161,7 +161,7 @@ The encoded content will then look like the following: ## 4 - Adding the Metadata -After you retrieved the key and value of your [ERC725Y](../../../standards/lsp-background/erc725#erc725y-generic-data-keyvalue-store) data key, you can call the [`setData()`](../../../contracts/contracts/ERC725/ERC725.md#setdata) function of the asset to update it's metadata on the contract. +After you retrieved the key and value of your [ERC725Y](/standards/erc725#erc725y-generic-data-keyvalue-store) data key, you can call the [`setData()`](../../../contracts/contracts/ERC725/ERC725.md#setdata) function of the asset to update it's metadata on the contract. :::tip Sample Implementation diff --git a/docs/learn/digital-assets/metadata-management/read-asset-data.md b/docs/learn/digital-assets/metadata-management/read-asset-data.md index 7d864a9488..0a693382dd 100644 --- a/docs/learn/digital-assets/metadata-management/read-asset-data.md +++ b/docs/learn/digital-assets/metadata-management/read-asset-data.md @@ -26,16 +26,16 @@ The full code of this example can be found in the 👾 [lukso-playground](https:

-On LUKSO, [Digital Assets](../../../standards/tokens/introduction.md) are created using the [LSP7 - Digital Asset](../../../standards/tokens/LSP7-Digital-Asset.md) and [LSP8 - Identifiable Digital Asset](../../../standards/tokens/LSP8-Identifiable-Digital-Asset.md) standards. The data of each digital asset lives in its own [ERC725Y](../../../standards/lsp-background/erc725.md#erc725y-generic-data-keyvalue-store) storage. This tutorial teaches you how to fetch and read this data. +On LUKSO, [Digital Assets](/standards/tokens/introduction.md) are created using the [LSP7 - Digital Asset](/standards/tokens/LSP7-Digital-Asset.md) and [LSP8 - Identifiable Digital Asset](/standards/tokens/LSP8-Identifiable-Digital-Asset.md) standards. The data of each digital asset lives in its own [ERC725Y](/standards/erc725.md#erc725y-generic-data-keyvalue-store) storage. This tutorial teaches you how to fetch and read this data. :::info Preparation Before following this guide, it is recommended to be a bit familiar with the token standards: -- [LSP4 - Digital Asset Metadata](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md). -- [LSP7 - Digital Asset](../../../standards/tokens/LSP7-Digital-Asset.md). -- [LSP8 - Digital Identifiable Asset](../../../standards/tokens/LSP8-Identifiable-Digital-Asset.md). -- [How digital assets differ based on their LSP4 Token Type](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md#types-of-digital-assets). +- [LSP4 - Digital Asset Metadata](/standards/tokens/LSP4-Digital-Asset-Metadata.md). +- [LSP7 - Digital Asset](/standards/tokens/LSP7-Digital-Asset.md). +- [LSP8 - Digital Identifiable Asset](/standards/tokens/LSP8-Identifiable-Digital-Asset.md). +- [How digital assets differ based on their LSP4 Token Type](/standards/tokens/LSP4-Digital-Asset-Metadata.md#types-of-digital-assets). ::: @@ -162,19 +162,19 @@ console.log(isLSP7, isLSP8); // each, true or false ## Fetch the Asset Metadata -[LSP4 - Digital Asset Metadata](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md) describes the data within [LSP7](../../../standards/tokens/LSP7-Digital-Asset.md) and [LSP8](../../../standards/tokens/LSP8-Identifiable-Digital-Asset.md) asset's [ERC725Y data storage](../../../standards/lsp-background/erc725#erc725y-generic-data-keyvalue-store). +[LSP4 - Digital Asset Metadata](/standards/tokens/LSP4-Digital-Asset-Metadata.md) describes the data within [LSP7](/standards/tokens/LSP7-Digital-Asset.md) and [LSP8](/standards/tokens/LSP8-Identifiable-Digital-Asset.md) asset's [ERC725Y data storage](/standards/erc725#erc725y-generic-data-keyvalue-store). The following data keys can be fetched 👇 -| 🗄️ Data Key | Value contained inside this data key | -| :------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `SupportedStandards:LSP4DigitalAsset` | A hex literal value confirming the ERC725Y contract contains metadata keys for the [LSP4DigitalAsset](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md) standard. | -| `LSP4Metadata` | The JSON file with asset descriptions and images. | -| `LSP4Creators[]` | An array of all creators of the asset. | -| `LSP4CreatorsMap:
` | A mapping of creator-specific information. | -| `LSP4TokenType` | The asset's token type (encoded as a `uint256` number). | -| `LSP4TokenSymbol` | The utf8 hex characters of the string representing the asset's symbol. | -| `LSP4TokenName` | The utf8 hex characters of the string representing the asset's name. | +| 🗄️ Data Key | Value contained inside this data key | +| :------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `SupportedStandards:LSP4DigitalAsset` | A hex literal value confirming the ERC725Y contract contains metadata keys for the [LSP4DigitalAsset](/standards/tokens/LSP4-Digital-Asset-Metadata.md) standard. | +| `LSP4Metadata` | The JSON file with asset descriptions and images. | +| `LSP4Creators[]` | An array of all creators of the asset. | +| `LSP4CreatorsMap:
` | A mapping of creator-specific information. | +| `LSP4TokenType` | The asset's token type (encoded as a `uint256` number). | +| `LSP4TokenSymbol` | The utf8 hex characters of the string representing the asset's symbol. | +| `LSP4TokenName` | The utf8 hex characters of the string representing the asset's name. | To retrieve and decode the value stored under this data keys, we will use [erc725.js](../../../tools/libraries/erc725js/getting-started.md) and instantiate the class with: @@ -368,7 +368,7 @@ console.log(creatorInformation); ## Interpret Data based on Token Type -If both, contract and metadata standard are aligned, Finally we need to determine the [LSP4 Token Type](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md#types-of-digital-assets) in order to interpret the metadata correctly. +If both, contract and metadata standard are aligned, Finally we need to determine the [LSP4 Token Type](/standards/tokens/LSP4-Digital-Asset-Metadata.md#types-of-digital-assets) in order to interpret the metadata correctly. At this point, you should be able to identify if the digital asset is a: @@ -377,7 +377,7 @@ At this point, you should be able to identify if the digital asset is a: - LSP8 - NFT - LSP8 - Collection -Based on the [token type](#detect-the-token-type), the information of the [LSP4 Digital Metadata](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md#types-of-digital-assets) can be interpreted differently: +Based on the [token type](#detect-the-token-type), the information of the [LSP4 Digital Metadata](/standards/tokens/LSP4-Digital-Asset-Metadata.md#types-of-digital-assets) can be interpreted differently: - As [**global token information**](#global-token-information) of the contract (Token or LSP7 NFT) - To each [**individual token ID**](#token-id-metadata) (LSP8 NFT or Collection) diff --git a/docs/learn/digital-assets/nft/create-nft-collection-lsp7.md b/docs/learn/digital-assets/nft/create-nft-collection-lsp7.md index 8a1cc4ab46..c0bda7d75b 100644 --- a/docs/learn/digital-assets/nft/create-nft-collection-lsp7.md +++ b/docs/learn/digital-assets/nft/create-nft-collection-lsp7.md @@ -6,7 +6,7 @@ description: Learn how to create an NFT Collection on LUKSO using LSP7 Digital A # Create an NFT Collection Using LSP7 -This tutorial explores how to create a collection of [digital assets](../../../standards/tokens/LSP7-Digital-Asset.md), where each digital asset is the same. This method is useful for minting large quantities of NFTs at once efficiently (eg: tickets for an event). +This tutorial explores how to create a collection of [digital assets](/standards/tokens/LSP7-Digital-Asset.md), where each digital asset is the same. This method is useful for minting large quantities of NFTs at once efficiently (eg: tickets for an event). :::note @@ -24,13 +24,13 @@ The full code of this example can be found in the smart contract section of the -When creating smart contracts representing digital assets on LUKSO, you will need to specify the token type and data keys for the 📄 [LSP4 Digital Asset Metadata](../../../standards/tokens/LSP4-Digital-Asset-Metadata) that will be stored in the 🗂️ [ERC725Y](../../../standards/lsp-background/erc725.md#erc725y-generic-data-keyvalue-store) storage of the Digital Asset. There are three different [token types](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md#lsp4tokentype): +When creating smart contracts representing digital assets on LUKSO, you will need to specify the token type and data keys for the 📄 [LSP4 Digital Asset Metadata](/standards/tokens/LSP4-Digital-Asset-Metadata) that will be stored in the 🗂️ [ERC725Y](/standards/erc725.md#erc725y-generic-data-keyvalue-store) storage of the Digital Asset. There are three different [token types](/standards/tokens/LSP4-Digital-Asset-Metadata.md#lsp4tokentype): - `0` = Token - `1` = NFT - `2` = Collection -For this example we will use the `Token` token type. You can create a custom 🌄 [LSP7 Digital Asset Token](../../../standards/tokens/LSP7-Digital-Asset.md) that extends [LSP7Mintable](../../../contracts/contracts/LSP7DigitalAsset/presets/LSP7Mintable.md) so that new assets can be minted by the [`owner`](../../../contracts/contracts/LSP7DigitalAsset/presets/LSP7Mintable.md#owner) of the smart contract. +For this example we will use the `Token` token type. You can create a custom 🌄 [LSP7 Digital Asset Token](/standards/tokens/LSP7-Digital-Asset.md) that extends [LSP7Mintable](../../../contracts/contracts/LSP7DigitalAsset/presets/LSP7Mintable.md) so that new assets can be minted by the [`owner`](../../../contracts/contracts/LSP7DigitalAsset/presets/LSP7Mintable.md#owner) of the smart contract. ```solidity title="contracts/Example1/EventTicketsNFT.sol" // SPDX-License-Identifier: MIT diff --git a/docs/learn/digital-assets/nft/create-nft-collection-lsp8.md b/docs/learn/digital-assets/nft/create-nft-collection-lsp8.md index 3da5164902..48cb117f75 100644 --- a/docs/learn/digital-assets/nft/create-nft-collection-lsp8.md +++ b/docs/learn/digital-assets/nft/create-nft-collection-lsp8.md @@ -9,7 +9,7 @@ import TabItem from '@theme/TabItem'; # Create an NFT Collection Using LSP8 -This tutorial explains how to create a collection of unique Digital Assets based on the [LSP8-Identifiable-Digital-Asset](../../../standards/tokens/LSP8-Identifiable-Digital-Asset.md) standard. +This tutorial explains how to create a collection of unique Digital Assets based on the [LSP8-Identifiable-Digital-Asset](/standards/tokens/LSP8-Identifiable-Digital-Asset.md) standard. :::note @@ -27,7 +27,7 @@ The full code of this example can be found in the smart contract section of the -When creating smart contracts representing digital assets on LUKSO, you need to specify the type of token you are deploying. This is done by setting the `LSP4TokenType` data key stored in the 🗂️ [ERC725Y](../../../standards/lsp-background/erc725.md#erc725y-generic-data-keyvalue-store) storage of the Digital Asset. There are three different [token types](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md#lsp4tokentype): +When creating smart contracts representing digital assets on LUKSO, you need to specify the type of token you are deploying. This is done by setting the `LSP4TokenType` data key stored in the 🗂️ [ERC725Y](../../../standards/erc725.md#erc725y-generic-data-keyvalue-store) storage of the Digital Asset. There are three different [token types](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md#lsp4tokentype): - `0` = Token - `1` = NFT diff --git a/docs/learn/digital-assets/nft/create-nft-collection-with-lsp7-tokenId.md b/docs/learn/digital-assets/nft/create-nft-collection-with-lsp7-tokenId.md index 241e1c63b6..d420655fa9 100644 --- a/docs/learn/digital-assets/nft/create-nft-collection-with-lsp7-tokenId.md +++ b/docs/learn/digital-assets/nft/create-nft-collection-with-lsp7-tokenId.md @@ -748,8 +748,8 @@ The deployed contract address should be printed in the console. Make sure to cop If you happen to have deployed the contract on one of our network (Testnet or Mainnet), you can check the contract on our [ERC725 Inspect tool](https://erc725-inspect.lukso.tech/inspector). By pasting the address of the contract, you should see that it supports: -- [ERC725Y](../../../standards/generic-standards/lsp2-json-schema.md) -- [LSP8IdentifiableDigitalAsset](../../../standards/tokens/LSP8-Identifiable-Digital-Asset.md) +- [ERC725Y](/standards/metadata/lsp2-json-schema.md) +- [LSP8IdentifiableDigitalAsset](/standards/tokens/LSP8-Identifiable-Digital-Asset.md) ![Inspect tool](../../../../static/img/learn/inspect-tool-lsp8.png) @@ -950,7 +950,7 @@ Let's run the script using `npx hardhat run scripts/mintLSP7SubCollections.ts -- If you happen to have deployed the contract on one of our network (Testnet or Mainnet), you can check the contract on our [ERC725 Inspect tool](https://erc725-inspect.lukso.tech/inspector). By pasting the address of the contract, you should see that it supports: -- [ERC725Y](../../../standards/generic-standards/lsp2-json-schema.md) +- [ERC725Y](../../../standards/metadata/lsp2-json-schema.md) - [LSP7DigitalAsset](../../../standards/tokens/LSP7-Digital-Asset.md) ![Inspect tool](../../../../static/img/learn/inspect-tool-lsp7.png) diff --git a/docs/learn/digital-assets/nft/read-nft-metadata.md b/docs/learn/digital-assets/nft/read-nft-metadata.md index 9ad6738b08..671d13481c 100644 --- a/docs/learn/digital-assets/nft/read-nft-metadata.md +++ b/docs/learn/digital-assets/nft/read-nft-metadata.md @@ -9,7 +9,7 @@ import TabItem from '@theme/TabItem'; # Read LSP8 NFT Metadata -If your digital asset contract is an [LSP8](../../../standards/tokens/LSP8-Identifiable-Digital-Asset.md) NFT or Collection, you can fetch the metadata of specific token IDs. +If your digital asset contract is an [LSP8](/standards/tokens/LSP8-Identifiable-Digital-Asset.md) NFT or Collection, you can fetch the metadata of specific token IDs. There are two different ways to retrieve the metadata of a `tokenId` based on the configuration of the contract. @@ -30,7 +30,7 @@ If neither _Token ID Metadata_ nor _Base URI_ are set, you should fall back and We will need the following dependencies to follow this guide: - [`lsp-smart-contracts`](../../../tools/libraries/lsp-smart-contracts/getting-started.md) to import the LSP8 contract ABI. -- [`erc725.js`](../../../tools/libraries/erc725js/getting-started.md) to easily get [ERC725Y](../../../standards/lsp-background/erc725.md) data keys and decode their values. +- [`erc725.js`](../../../tools/libraries/erc725js/getting-started.md) to easily get [ERC725Y](/standards/erc725.md) data keys and decode their values. @@ -104,7 +104,7 @@ const myAssetContract = new web3.eth.Contract( The [LSP8](../../../standards/tokens/LSP8-Identifiable-Digital-Asset.md) allows for different [Token ID Formats](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidformat), meaning developers can specify their token IDs as `Number`, `String`, `Smart Contract Address`, `Byte Identifier` or `Hash Digest`. -To call the contract, you **must first prepare your token IDs** to match the standardized **Byte32 Hex Strings** based on the [`LSP8TokenIdFormat`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidformat) standardization. The **global token ID format** can be fetched from the [ERC725Y](../../../standards/lsp-background/erc725.md#erc725y-generic-data-keyvalue-store) data storage using the [`getData()`](../../../contracts/contracts/ERC725/ERC725.md#getdata) function: +To call the contract, you **must first prepare your token IDs** to match the standardized **Byte32 Hex Strings** based on the [`LSP8TokenIdFormat`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidformat) standardization. The **global token ID format** can be fetched from the [ERC725Y](/standards/erc725.md#erc725y-generic-data-keyvalue-store) data storage using the [`getData()`](../../../contracts/contracts/ERC725/ERC725.md#getdata) function: @@ -391,7 +391,7 @@ Assets created with LSP versions below 🛠️ [`@lukso/lsp-smart-contracts`](.. You can fetch the [`LSP8TokenMetadataBaseURI`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenmetadatabaseuri) and build the correct metadata link by concatinating the [formatted](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidformat) token ID. Based on the [`LSP8TokenIDFormat`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#lsp8tokenidformat), the Base URI can either be: -- **equal across all token IDs**: To fetch the global Base URI, use the [`getData(...)`](../../../contracts/contracts/ERC725/ERC725.md#getdata) function of the asset to receive the [ERC725Y data storage](../../../standards/lsp-background/erc725.md#erc725y-generic-data-keyvalue-store). This applies if the [`LSP8TokenIDFormat`](#preparing-the-token-ids) is `0, 1, 2, or 4`. +- **equal across all token IDs**: To fetch the global Base URI, use the [`getData(...)`](../../../contracts/contracts/ERC725/ERC725.md#getdata) function of the asset to receive the [ERC725Y data storage](/standards/erc725.md#erc725y-generic-data-keyvalue-store). This applies if the [`LSP8TokenIDFormat`](#preparing-the-token-ids) is `0, 1, 2, or 4`. - **mixed across all token IDs**: To fetch the individual Base URI, use the [`getDataFromTokenID(...)`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-8-IdentifiableDigitalAsset.md#getdatafortokenid) function using a specific token ID. This has to be done if the [`LSP8TokenIDFormat`](#preparing-the-token-ids) is `100, 101, 102, or 104`. diff --git a/docs/learn/digital-assets/retrieve-token-type.md b/docs/learn/digital-assets/retrieve-token-type.md index 552820e0d1..d49f2d2fba 100644 --- a/docs/learn/digital-assets/retrieve-token-type.md +++ b/docs/learn/digital-assets/retrieve-token-type.md @@ -24,7 +24,7 @@ Token Types are beneficial because of the wide range of asset use cases. The [LS :::tip Convenience Tools -You can use the ⚒️ [`erc725.js`](../../tools/libraries/erc725js/getting-started.md) library, which automatically decodes [ERC725Y](../../standards/lsp-background/erc725.md#erc725y-generic-data-keyvalue-store) storage keys for you. +You can use the ⚒️ [`erc725.js`](../../tools/libraries/erc725js/getting-started.md) library, which automatically decodes [ERC725Y](/standards/erc725.md#erc725y-generic-data-keyvalue-store) storage keys for you. If you are using a regular contract instance from Ethers or Web3, you can use the data keys from the [`lsp-smart-contracts`](../../tools/libraries/lsp-smart-contracts/getting-started.md) library by importing the `ERC725YDataKeys` constant. diff --git a/docs/learn/introduction.md b/docs/learn/introduction.md index 6c2424390a..2775e5e47c 100644 --- a/docs/learn/introduction.md +++ b/docs/learn/introduction.md @@ -13,23 +13,23 @@ By integrating different LSPs in unique ways, LUKSO solves fundamental blockchai - - + + - + - - + + - +

[👩‍🎤 Standardised On-Chain profile](../standards/universal-profile/lsp3-profile-metadata.md)

Users can build their profiles on-chain, adding images, tags, descriptions and links to their accounts to shape their online persona.

Standardizing accounts prevents delays in adoption caused by unpredictable changes. It ensures all developers follow a unified behavior, enabling consistent and reliable development on top of the account.

[📝 Updatable and flexible metadata](../standards/generic-standards/lsp2-json-schema.md)

Metadata can be updated, enabling dynamic NFTs that can change certain properties over time, while other properties remain immutable.

[👩‍🎤 Standardised On-Chain profile](/standards/metadata/lsp3-profile-metadata.md)

Users can build their profiles on-chain, adding images, tags, descriptions and links to their accounts to shape their online persona.

Standardizing accounts prevents delays in adoption caused by unpredictable changes. It ensures all developers follow a unified behavior, enabling consistent and reliable development on top of the account.

[📝 Updatable and flexible metadata](/standards/metadata/lsp2-json-schema.md)

Metadata can be updated, enabling dynamic NFTs that can change certain properties over time, while other properties remain immutable.

[📢 Notifications and Reactability](../standards/generic-standards/lsp1-universal-receiver.md)

The ability to be notified and react on different actions is essential for an account to become more interactive and social by emitting a unique event to the network with the action being informed about, which can be parsed by interfaces and off chain clients.

[📢 Notifications and Reactability](/standards/accounts/lsp1-universal-receiver.md)

The ability to be notified and react on different actions is essential for an account to become more interactive and social by emitting a unique event to the network with the action being informed about, which can be parsed by interfaces and off chain clients.

[⛽️ Gasless experience](./concepts.md#transaction-relay-service)

Universal Profiles support Transaction Relay Services that cover the gas for users's transactions. Users won't have the burden of getting the native token of the chain to start interacting with your application.

[💫 Extend your account over time](../standards/generic-standards/lsp17-contract-extension.md)

Users can extend their account over time seamlessly, with no need to alter code and redeploy the associated smart contract.

[🔓 Upgradeable security](../standards/universal-profile/lsp6-key-manager)

Universal Profiles can be owned by any EOA or smart contract (_e.g: multisig_). And users can control their accounts through multiple devices and applications, each of them with different permissions.

This also allow the creation of services like social recovery, through family, friends or trustless dApps.

[💫 Extend your account over time](/standards/accounts/lsp17-contract-extension.md)

Users can extend their account over time seamlessly, with no need to alter code and redeploy the associated smart contract.

[🔓 Upgradeable security](/standards/access-control/lsp6-key-manager)

Universal Profiles can be owned by any EOA or smart contract (_e.g: multisig_). And users can control their accounts through multiple devices and applications, each of them with different permissions.

This also allow the creation of services like social recovery, through family, friends or trustless dApps.

[🚦 Permission System](../learn/universal-profile/key-manager/grant-permissions.md)

A robust permission system allows fine-grained control over who can perform certain actions on the contract.

This is essential for managing access rights and maintaining security, especially in complex systems with multiple users or roles while having the permissions and restrictions stored within the profile.

[✍️ ✍️Multi Sig](../learn/universal-profile/key-manager/grant-permissions.md)

The use of multisig provide an extra layer of security to manage the account.

[🪝 Pre and Post Execution Hooks](../standards/tokens/LSP7-Digital-Asset#lsp1-token-hooks)

These hooks allow additional logic to be executed before and after the main function call. This feature, available through LSP20 in Universal Profiles, provides greater control over contract behavior and enables advanced use cases.

[🪝 Pre and Post Execution Hooks](/standards/tokens/LSP7-Digital-Asset#lsp1-token-hooks)

These hooks allow additional logic to be executed before and after the main function call. This feature, available through LSP20 in Universal Profiles, provides greater control over contract behavior and enables advanced use cases.

🇨🇭🔪 Multi-purpose

The ability to serve various roles (like being a DAO, organization, Brands, AI, robot, etc.) showcases the versatility of the contract. This flexibility is important for supporting a wide range of applications and adapting to different use cases.
@@ -38,30 +38,30 @@ By integrating different LSPs in unique ways, LUKSO solves fundamental blockchai The table below highlights the features of the LSPs and their benefits: -| Feature | Benefits | -| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **🗄️ Metadata in one place** | When using traditional web3 wallets, a user has to fill in its same infos again every time it creates a new account on a new dApp (_e.g: username, biography, social media accounts_)

Universal Profile stores user data in one single place (the 🆙 contract storage). This allows any dApp to retrieve the same information, and makes dApp onboarding easier and faster. | -| **⛽️ Gas-Less transactions** | Universal Profiles enable gas-less transactions. The relayer pay the gas fees and does not require the user to hold native tokens to pay for the transaction fee.

Without a [Transaction Relay Service](../standards/relayer-api.md), the [controller](./concepts.md#controller) of the Universal Profile must be funded to execute transactions. | -| **🔑 Multi-Control through permissions** | Universal Profiles can be controlled by multiple EOAs with various permission levels. Controllers can be on different devices or represent dApps, each with specific access rights, such as token transfers, playlist management, or account recovery. | -| **📢 Notification and Reactivity** | The 🆙 can be customized to react differently based on different events it receives. For instance, the default implementation automatically register new received assets. | -| **⚙️ Extendability with pluggable Extensions** | New features (like new function selectors not present by default in the smart contract code) can be added to a Universal Profile, using a system of extensions.

See our guide [**Extending Universal Profile functionalities**](./universal-profile/advanced-guides/extend-profile-functionalities.md) for more details. | +| Feature | Benefits | +| ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **🗄️ Metadata in one place** | When using traditional web3 wallets, a user has to fill in its same infos again every time it creates a new account on a new dApp (_e.g: username, biography, social media accounts_)

Universal Profile stores user data in one single place (the 🆙 contract storage). This allows any dApp to retrieve the same information, and makes dApp onboarding easier and faster. | +| **⛽️ Gas-Less transactions** | Universal Profiles enable gas-less transactions. The relayer pay the gas fees and does not require the user to hold native tokens to pay for the transaction fee.

Without a [Transaction Relay Service](../standards/accounts/lsp15-transaction-relayer-api.md), the [controller](./concepts.md#controller) of the Universal Profile must be funded to execute transactions. | +| **🔑 Multi-Control through permissions** | Universal Profiles can be controlled by multiple EOAs with various permission levels. Controllers can be on different devices or represent dApps, each with specific access rights, such as token transfers, playlist management, or account recovery. | +| **📢 Notification and Reactivity** | The 🆙 can be customized to react differently based on different events it receives. For instance, the default implementation automatically register new received assets. | +| **⚙️ Extendability with pluggable Extensions** | New features (like new function selectors not present by default in the smart contract code) can be added to a Universal Profile, using a system of extensions.

See our guide [**Extending Universal Profile functionalities**](./universal-profile/advanced-guides/extend-profile-functionalities.md) for more details. | ### UP Compared to Other Wallets Below you can find the comparison between Universal Profiles and other smart contract accounts: -| | Gnosis SAFE | Base Smart Contract Account | EIP 6900 Modular Smart Contract account | Universal Profiles | -| ------------------------------ | ----------- | --------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------ | -| Standardised Profiles | 🔶 | ❌ | ✅ | ✅ | -| Generic Information Storage | ❌ | ❌ | ❌ | ✅ Through [ERC725Y](../standards/universal-profile/lsp0-erc725account.md#erc725y---generic-key-value-store) | -| Notifications and Reactability | ❌ | ❌ | ❌ | ✅ Through [LSP1](../standards/generic-standards/lsp1-universal-receiver.md) | -| Gasless Experience | ✅ | ✅ | ✅ | ✅ via the [Transaction Relayer](../standards/relayer-api.md) | -| Extensible | ✅ | ✅ | ✅ | ✅ Through [LSP17](../standards/generic-standards/lsp17-contract-extension.md) | -| Upgradeable Security | ✅ | ✅ | ✅ | ✅ Through [LSP14](../standards/generic-standards/lsp14-ownable-2-step.md) | -| Permission System | ❌ | ❌ | ❌ | ✅ Through [LSP6](../standards/universal-profile/lsp6-key-manager.md) | -| Multisig | ✅ | ❌ | ❌ | 🔶 Can behave as multisig if controlled by a multisig | -| Pre and Post Execution Hooks | ✅ | ✅ | ✅ | ✅ Through [LSP20](../standards/generic-standards/lsp20-call-verification.md) | -| Multi purpose | ❌ | ❌ | ❌ | ✅ Can be a DAO, Organisation, Brand, AI, Robot, etc | +| | Gnosis SAFE | Base Smart Contract Account | EIP 6900 Modular Smart Contract account | Universal Profiles | +| ------------------------------ | ----------- | --------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------------------- | +| Standardised Profiles | 🔶 | ❌ | ✅ | ✅ | +| Generic Information Storage | ❌ | ❌ | ❌ | ✅ Through [ERC725Y](../standards/accounts/lsp0-erc725account.md#erc725y---generic-key-value-store) | +| Notifications and Reactability | ❌ | ❌ | ❌ | ✅ Through [LSP1](../standards/accounts/lsp1-universal-receiver.md) | +| Gasless Experience | ✅ | ✅ | ✅ | ✅ via the [Transaction Relayer](../standards/accounts/lsp15-transaction-relayer-api.md) | +| Extensible | ✅ | ✅ | ✅ | ✅ Through [LSP17](../standards/accounts/lsp17-contract-extension.md) | +| Upgradeable Security | ✅ | ✅ | ✅ | ✅ Through [LSP14](../standards/access-control/lsp14-ownable-2-step.md) | +| Permission System | ❌ | ❌ | ❌ | ✅ Through [LSP6](../standards/access-control/lsp6-key-manager.md) | +| Multisig | ✅ | ❌ | ❌ | 🔶 Can behave as multisig if controlled by a multisig | +| Pre and Post Execution Hooks | ✅ | ✅ | ✅ | ✅ Through [LSP20](../standards/accounts/lsp20-call-verification.md) | +| Multi purpose | ❌ | ❌ | ❌ | ✅ Can be a DAO, Organisation, Brand, AI, Robot, etc | ### ERCs Compared to LSPs diff --git a/docs/learn/migrate/migrate-erc20-to-lsp7.md b/docs/learn/migrate/migrate-erc20-to-lsp7.md index 1274d9866a..fccf82d91c 100644 --- a/docs/learn/migrate/migrate-erc20-to-lsp7.md +++ b/docs/learn/migrate/migrate-erc20-to-lsp7.md @@ -130,7 +130,7 @@ For full compatibility with ERC20 behavior, set this to empty bytes `""`. This d > See the [**LSP7 Standard > LSP1 Token Hooks**](../../standards/tokens/LSP7-Digital-Asset.md#lsp1-token-hooks) section for more details. -- **LSP7 metadata is generic**: via a [flexible data key / value store](<(../../standards/lsp-background/erc725.md#erc725y-generic-data-keyvalue-store)>). It can be set and retrieved via [`setData(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#setdata) / [`setDataBatch(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#setdatabatch) and [`getData(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#getdata) / [`getDataBatch(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#getdatabatch). +- **LSP7 metadata is generic**: via a [flexible data key / value store](<(../../standards/erc725.md#erc725y-generic-data-keyvalue-store)>). It can be set and retrieved via [`setData(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#setdata) / [`setDataBatch(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#setdatabatch) and [`getData(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#getdata) / [`getDataBatch(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#getdatabatch). ERC20 metadata is limited to `name()` and `symbol()`. LSP7 allows to store any data after deployment without limitations. diff --git a/docs/learn/migrate/migrate-erc721-to-lsp8.md b/docs/learn/migrate/migrate-erc721-to-lsp8.md index 5da8bf1336..f3a68da0d3 100644 --- a/docs/learn/migrate/migrate-erc721-to-lsp8.md +++ b/docs/learn/migrate/migrate-erc721-to-lsp8.md @@ -132,7 +132,7 @@ For full compatibility with ERC721 behavior, set this to empty bytes `""`. This > See the [**LSP8 Standard > LSP1 Token Hooks**](../../standards/tokens/LSP8-Identifiable-Digital-Asset.md#lsp1-token-hooks) section for more details. -- **LSP8 metadata is generic**: via a [flexible data key / value store](<(../../standards/lsp-background/erc725.md#erc725y-generic-data-keyvalue-store)>). It can be set and retrieved via [`setData(...)`](../../contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md#setdata) / [`setDataBatch(...)`](../../contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md#setdatabatch) and [`getData(...)`](../../contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md#getdata) / [`getDataBatch(...)`](../../contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md#getdatabatch). +- **LSP8 metadata is generic**: via a [flexible data key / value store](<(../../standards/erc725.md#erc725y-generic-data-keyvalue-store)>). It can be set and retrieved via [`setData(...)`](../../contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md#setdata) / [`setDataBatch(...)`](../../contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md#setdatabatch) and [`getData(...)`](../../contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md#getdata) / [`getDataBatch(...)`](../../contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md#getdatabatch). ### Interact with the Token Contract diff --git a/docs/learn/migrate/migrate-to-lukso.md b/docs/learn/migrate/migrate-to-lukso.md index b98dc4403a..4daed41b42 100644 --- a/docs/learn/migrate/migrate-to-lukso.md +++ b/docs/learn/migrate/migrate-to-lukso.md @@ -37,13 +37,13 @@ Any traditional web3 wallet (_e.g: Metamask_) can interact with LUKSO dApps. Sim However, the [Universal Profile Browser Extension](/install-up-browser-extension) provides more features and a better user experience when interacting with dApps. Universal Profiles (known as 🆙) are smart contract accounts that offer many benefits. -| Feature | Benefits | -| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **🗄️ Metadata in one place** | When using traditional web3 wallets, a user has to fill in its same infos again every time it creates a new account on a new dApp (_e.g: username, biography, social media accounts_)

Universal Profile stores user data in one single place (the 🆙 contract storage). This allows any dApp to retrieve the same information, and makes dApp onboarding easier and faster. | -| **⛽️ Gas-Less transactions** | Universal Profiles enable gas-less transactions. The relayer pay the gas fees and does not require the user to hold native tokens to pay for the transaction fee.

Without a [Transaction Relay Service](../../standards/relayer-api.md), the [controller](../concepts.md#controller) of the Universal Profile must be funded to execute transactions. | -| **🔑 Multi-Control through permissions** | Universal Profiles can be controlled by multiple EOAs with various permission levels. Controllers can be on different devices or represent dApps, each with specific access rights, such as token transfers, playlist management, or account recovery. | -| **📢 Notification and Reactivity** | The 🆙 can be customized to react differently based on different events it receives. For instance, the default implementation automatically register new received assets. | -| **⚙️ Extendability with pluggable Extensions** | New features (like new function selectors not present by default in the smart contract code) can be added to a Universal Profile, using a system of extensions.

See our guide [**Extending Universal Profile functionalities**](../universal-profile/advanced-guides/extend-profile-functionalities.md) for more details. | +| Feature | Benefits | +| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **🗄️ Metadata in one place** | When using traditional web3 wallets, a user has to fill in its same infos again every time it creates a new account on a new dApp (_e.g: username, biography, social media accounts_)

Universal Profile stores user data in one single place (the 🆙 contract storage). This allows any dApp to retrieve the same information, and makes dApp onboarding easier and faster. | +| **⛽️ Gas-Less transactions** | Universal Profiles enable gas-less transactions. The relayer pay the gas fees and does not require the user to hold native tokens to pay for the transaction fee.

Without a [Transaction Relay Service](../../standards/accounts/lsp15-transaction-relayer-api.md), the [controller](../concepts.md#controller) of the Universal Profile must be funded to execute transactions. | +| **🔑 Multi-Control through permissions** | Universal Profiles can be controlled by multiple EOAs with various permission levels. Controllers can be on different devices or represent dApps, each with specific access rights, such as token transfers, playlist management, or account recovery. | +| **📢 Notification and Reactivity** | The 🆙 can be customized to react differently based on different events it receives. For instance, the default implementation automatically register new received assets. | +| **⚙️ Extendability with pluggable Extensions** | New features (like new function selectors not present by default in the smart contract code) can be added to a Universal Profile, using a system of extensions.

See our guide [**Extending Universal Profile functionalities**](../universal-profile/advanced-guides/extend-profile-functionalities.md) for more details. | Universal Profiles can be controlled through multiple EOAs (and their associated private keys), where each private key can be allowed or restricted to specific actions via permissions. diff --git a/docs/learn/other-guides/NFC-NFT.md b/docs/learn/other-guides/NFC-NFT.md index 21046af6ad..9df99b6b6e 100644 --- a/docs/learn/other-guides/NFC-NFT.md +++ b/docs/learn/other-guides/NFC-NFT.md @@ -30,7 +30,7 @@ Typically, NFC and NFT integrations are used for verifying ownership or triggeri ### Main Account -In the context of LUKSO, the primary account for users is not a traditional Externally Owned Account ([EOA](https://ethereum.org/developers/docs/accounts)), but a [UniversalProfile](../../standards/universal-profile/introduction.md), which is a smart contract-based account. In this context, when integrating NFC with NFTs on LUKSO, particularly NFC chips that can sign transactions, it's essential to ensure compatibility with these smart contract accounts. An advanced NFC chip can act as a controller for the UniversalProfile, enabling it to directly execute interactions such as transfers or other blockchain-based operations. +In the context of LUKSO, the primary account for users is not a traditional Externally Owned Account ([EOA](https://ethereum.org/developers/docs/accounts)), but a [UniversalProfile](../../standards/accounts/introduction.md), which is a smart contract-based account. In this context, when integrating NFC with NFTs on LUKSO, particularly NFC chips that can sign transactions, it's essential to ensure compatibility with these smart contract accounts. An advanced NFC chip can act as a controller for the UniversalProfile, enabling it to directly execute interactions such as transfers or other blockchain-based operations. ### Token Standards diff --git a/docs/learn/other-guides/deploy-multichain-contracts.md b/docs/learn/other-guides/deploy-multichain-contracts.md index b684241381..ca7dcdebf7 100644 --- a/docs/learn/other-guides/deploy-multichain-contracts.md +++ b/docs/learn/other-guides/deploy-multichain-contracts.md @@ -6,7 +6,7 @@ description: Learn to deploy contracts with the same addresses on multiple block # Deploy Multichain Contracts -In this guide, we will focus on deploying a contract at the same address across different blockchains using the [LSP16-UniversalFactory](../../standards/generic-standards/lsp16-universal-factory.md) standard. While this method is suitable for deploying a variety of contracts, it's important to note that for deploying Universal Profiles specifically that requires setup with several contracts, the [LSP23-LinkedContractFactory](../universal-profile/advanced-guides/deploy-up-with-lsp23.md) is recommended as it facilitates the setup and linking of several contracts more efficiently. +In this guide, we will focus on deploying a contract at the same address across different blockchains using the [LSP16-UniversalFactory](../../standards/factories/lsp16-universal-factory.md) standard. While this method is suitable for deploying a variety of contracts, it's important to note that for deploying Universal Profiles specifically that requires setup with several contracts, the [LSP23-LinkedContractFactory](../universal-profile/advanced-guides/deploy-up-with-lsp23.md) is recommended as it facilitates the setup and linking of several contracts more efficiently. ## Contract Creation diff --git a/docs/learn/standard-detection.md b/docs/learn/standard-detection.md index 551d77fcc5..a028084a3b 100644 --- a/docs/learn/standard-detection.md +++ b/docs/learn/standard-detection.md @@ -1,6 +1,6 @@ --- sidebar_label: '🕵🏽 Standard Detection' -description: Check supported ERC725 storage keys and interfaces of LSPs (LUKSO Standard Proposals) smart contracts. +description: Learn how to detect different smart contract interfaces and a set of metadata keys related to the LSP (LUKSO Standards Proposals) using ERC165 interface Ids and the 'SupportedStandards:{StandardName}' data key. --- import Tabs from '@theme/Tabs'; @@ -8,11 +8,15 @@ import TabItem from '@theme/TabItem'; # Standard Detection -If you want to ensure that LSP standards are implemented and working correctly before letting your application interact with smart contracts, you can check their supported ERC725 storage keys and interfaces. +:::caution + +The **`interfaceId`** and the **`SupportedStandards:{StandardName}`** data key is not the most secure way to check for a standard, as they could be set manually. + +::: :::tip -You can also use the [🔎 ERC725 Inspect Tool](https://erc725-inspect.lukso.tech/) to fetch and check standards of smart contract addresses within the browser. +Use the [🔎 ERC725 Inspect Tool](https://erc725-inspect.lukso.tech/) to check standards interfaces and metadata of smart contract addresses easily. ::: @@ -22,6 +26,8 @@ You can also use the [🔎 ERC725 Inspect Tool](https://erc725-inspect.lukso.tec ::: +If you want to ensure that LSP standards are implemented and working correctly before letting your application interact with smart contracts, you can check their supported ERC725 storage keys and interfaces. + ## Setup The following code snippets require the following libraries to be installed: @@ -32,7 +38,7 @@ npm install web3 @erc725/erc725.js @lukso/lsp-smart-contracts ## Metadata Detection -You can verify if a contract contains a specific set of [ERC725Y](../standards/lsp-background/erc725#erc725y-generic-data-keyvalue-store) keys by checking the value stored under the ERC725Y storage key `SupportedStandards:{StandardName}` using the [erc725.js](../tools/libraries/erc725js/getting-started.md) library. +You can verify if a contract contains a specific set of [ERC725Y](../standards/erc725#erc725y-generic-data-keyvalue-store) keys by checking the value stored under the ERC725Y storage key `SupportedStandards:{StandardName}` using the [erc725.js](../tools/libraries/erc725js/getting-started.md) library. :::note Example @@ -40,7 +46,7 @@ You can verify if a contract contains a specific set of [ERC725Y](../standards/l ::: -Similar to the [Read Profile Data Guide](./universal-profile/metadata/read-profile-data.md), you can use the [`getData()`](../tools/libraries/erc725js/methods.md#getdata) function to check if the contract has a specific metadata standard like [LSP3 Profile](../standards/universal-profile/lsp3-profile-metadata), [LSP4 Digital Asset](../standards/tokens/LSP4-Digital-Asset-Metadata) or a [LSP9 Vault](../standards/universal-profile/lsp9-vault). +Similar to the [Read Profile Data Guide](./universal-profile/metadata/read-profile-data.md), you can use the [`getData()`](../tools/libraries/erc725js/methods.md#getdata) function to check if the contract has a specific metadata standard like [LSP3 Profile](../standards/metadata/lsp3-profile-metadata), [LSP4 Digital Asset](../standards/tokens/LSP4-Digital-Asset-Metadata) or a [LSP9 Vault](../standards/accounts/lsp9-vault). ### Example 1 - Detect LSP3 Profile data keys @@ -256,7 +262,7 @@ Calling this function will return `true` if the contract implements this specifi :::note Example -A **[Universal Profile](../standards/universal-profile/lsp3-profile-metadata.md)** is a contract based on [LSP0 - ERC725Account](../standards/universal-profile/lsp0-erc725account.md). Therefore, the contract MUST implement the functions defined in the [ERC725Account interface](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#interface-cheat-sheet). +A **[Universal Profile](../standards/metadata/lsp3-profile-metadata.md)** is a contract based on [LSP0 - ERC725Account](../standards/accounts/lsp0-erc725account.md). Therefore, the contract MUST implement the functions defined in the [ERC725Account interface](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-0-ERC725Account.md#interface-cheat-sheet). ::: diff --git a/docs/learn/universal-profile/advanced-guides/4337-extension.md b/docs/learn/universal-profile/advanced-guides/4337-extension.md index 876eb25282..b6143e3975 100644 --- a/docs/learn/universal-profile/advanced-guides/4337-extension.md +++ b/docs/learn/universal-profile/advanced-guides/4337-extension.md @@ -14,7 +14,7 @@ This guide assumes that you are already familiar with the [EIP-4337](https://eip ### Key Manager -The Universal Profile contract must be owned by a [KeyManager](../../../standards/universal-profile/lsp6-key-manager.md) contract. +The Universal Profile contract must be owned by a [KeyManager](../../../standards/access-control/lsp6-key-manager.md) contract. ### Bundlers @@ -26,7 +26,7 @@ The [`EntryPoint`](https://eips.ethereum.org/EIPS/eip-4337#required-entry-point- ### Have a controller with the 4337 Extension Permission -The controller of the Universal Profile that will use the 4337 extension must have the [`_4337_PERMISSION`](https://github.com/lukso-network/lsp-smart-contracts/blob/0a951df15f282840ef89499da94e6ab47380d5dd/contracts/LSP17Extensions/Extension4337.sol#L33) permission in order to use it. To learn more about permissions, refer to the [LSP6 standard](../../../standards/universal-profile/lsp6-key-manager#permissions). +The controller of the Universal Profile that will use the 4337 extension must have the [`_4337_PERMISSION`](https://github.com/lukso-network/lsp-smart-contracts/blob/0a951df15f282840ef89499da94e6ab47380d5dd/contracts/LSP17Extensions/Extension4337.sol#L33) permission in order to use it. To learn more about permissions, refer to the [LSP6 standard](../../../standards/access-control/lsp6-key-manager#permissions). ### Deployment of the 4337 Extension diff --git a/docs/learn/universal-profile/advanced-guides/deploy-up-with-lsp23.md b/docs/learn/universal-profile/advanced-guides/deploy-up-with-lsp23.md index d8e8c75fce..ad3c50f45f 100644 --- a/docs/learn/universal-profile/advanced-guides/deploy-up-with-lsp23.md +++ b/docs/learn/universal-profile/advanced-guides/deploy-up-with-lsp23.md @@ -8,7 +8,7 @@ sidebar_position: 1 ## Introduction -This guide will walk you through the steps to deploy a Universal Profile and its Key Manager using LSP23 Linked Contract Factory. We will not do a deep dive into the LSPs specifications. For more information on these specifications, please refer to the [LSP23 specification](../../../standards/generic-standards/lsp23-linked-contracts-factory.md), the [Universal Profile specification](../../../standards/universal-profile/introduction.md), and the [LSP6 Key Manager specification](../../../standards/universal-profile/lsp6-key-manager.md). +This guide will walk you through the steps to deploy a Universal Profile and its Key Manager using LSP23 Linked Contract Factory. We will not do a deep dive into the LSPs specifications. For more information on these specifications, please refer to the [LSP23 specification](../../../standards/factories/lsp23-linked-contracts-factory.md), the [Universal Profile specification](../../../standards/accounts/introduction.md), and the [LSP6 Key Manager specification](../../../standards/access-control/lsp6-key-manager.md). You will be guided on how to create a script that could be used to deploy a Universal Profile and its Key Manager. In this example, we will be framework agnostic, but if you wish to see how to use it in Hardhat, you can refer to the [LUKSO Playground](https://github.com/lukso-network/lukso-playground) repository. ## Prerequisites @@ -54,7 +54,7 @@ const UNIVERSAL_PROFILE_IMPLEMENTATION_ADDRESS = '0x3024D38EA2434BA6635003Dc1BDC0daB5882ED4F'; const LSP6_KEY_MANAGER_IMPLEMENTATION_ADDRESS = '0x2Fe3AeD98684E7351aD2D408A43cE09a738BF8a4'; -// this will be needed later so we can set the Universal Receiver to the Universal Profile (see https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver) +// this will be needed later so we can set the Universal Receiver to the Universal Profile (see https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver) const UNIVERSAL_RECEIVER_ADDRESS = '0x7870C5B8BC9572A8001C3f96f7ff59961B23500D'; const MAIN_CONTROLLER = '0x3303Ce3b8644D566271DD2Eb54292d32F1458968'; ``` @@ -137,19 +137,19 @@ async function main() { ### Create the Universal Profile initialization calldata -When deploying your Universal Profile, you might want to initialize it with some data. For example, you may want to set the Universal Profile [LSP3 Metadata](../../../standards/universal-profile/lsp3-profile-metadata.md), set the Universal Receiver to the Universal Profile, give some [LSP6 permissions](../../../standards/universal-profile/lsp6-key-manager#permissions.md) to some controllers, etc. For the following guide we will: +When deploying your Universal Profile, you might want to initialize it with some data. For example, you may want to set the Universal Profile [LSP3 Metadata](../../../standards/metadata/lsp3-profile-metadata.md), set the Universal Receiver to the Universal Profile, give some [LSP6 permissions](../../../standards/access-control/lsp6-key-manager#permissions.md) to some controllers, etc. For the following guide we will: -- set the Universal Profile [`LSP3Profile`](../../../standards/universal-profile/lsp3-profile-metadata.md) Metadata -- set the [Universal Receiver](../../../standards/generic-standards/lsp1-universal-receiver.md) to the Universal Profile -- give some permissions to the Universal Receiver ([`SUPER_SETDATA` and `REENTRANCY`](../../../standards/universal-profile/lsp6-key-manager#permissions)) +- set the Universal Profile [`LSP3Profile`](../../../standards/metadata/lsp3-profile-metadata.md) Metadata +- set the [Universal Receiver](../../../standards/accounts/lsp1-universal-receiver.md) to the Universal Profile +- give some permissions to the Universal Receiver ([`SUPER_SETDATA` and `REENTRANCY`](../../../standards/access-control/lsp6-key-manager#permissions)) - give all permissions to the main controller - set the [`AddressPermissions[]`](../../../standards/universal-profile/lsp6-key-manager.md#permissions) length data key -- set the [`AddressPermissions[]`](../../../standards/universal-profile/lsp6-key-manager.md#permissions) array data key + set the [`AddressPermissions[]`](../../../standards/access-control/lsp6-key-manager.md#permissions) length data key +- set the [`AddressPermissions[]`](../../../standards/access-control/lsp6-key-manager.md#permissions) array data key - set the [`AddressPermissions:Permissions:
`](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-6-KeyManager.md#addresspermissionspermissionsaddress) data keys #### Create the LSP3 Metadata -The LSP3 Metadata is a JSON object that contains information about the Universal Profile. For more information on the LSP3 Metadata, please refer to the [LSP3 Profile Metadata specification](../../../standards/universal-profile/lsp3-profile-metadata.md). For the sake of simplicity, we will use one that we previously created and pushed to IPFS: +The LSP3 Metadata is a JSON object that contains information about the Universal Profile. For more information on the LSP3 Metadata, please refer to the [LSP3 Profile Metadata specification](../../../standards/metadata/lsp3-profile-metadata.md). For the sake of simplicity, we will use one that we previously created and pushed to IPFS: ```typescript async function main() { @@ -315,7 +315,7 @@ const UNIVERSAL_PROFILE_IMPLEMENTATION_ADDRESS = '0x3024D38EA2434BA6635003Dc1BDC0daB5882ED4F'; const LSP6_KEY_MANAGER_IMPLEMENTATION_ADDRESS = '0x2Fe3AeD98684E7351aD2D408A43cE09a738BF8a4'; -const UNIVERSAL_RECEIVER_ADDRESS = '0x7870C5B8BC9572A8001C3f96f7ff59961B23500D'; // this will be needed later so we can set the Universal Receiver to the Universal Profile (see https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver) +const UNIVERSAL_RECEIVER_ADDRESS = '0x7870C5B8BC9572A8001C3f96f7ff59961B23500D'; // this will be needed later so we can set the Universal Receiver to the Universal Profile (see https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver) const MAIN_CONTROLLER = '0x3303Ce3b8644D566271DD2Eb54292d32F1458968'; const SALT = '0x5eed5eed5eed5eed5eed5eed5eed5eed5eed5eed5eed5eed5eed5eed5eed5eed'; diff --git a/docs/learn/universal-profile/advanced-guides/extend-profile-functionalities.md b/docs/learn/universal-profile/advanced-guides/extend-profile-functionalities.md index 5f33872dc5..208f659b70 100644 --- a/docs/learn/universal-profile/advanced-guides/extend-profile-functionalities.md +++ b/docs/learn/universal-profile/advanced-guides/extend-profile-functionalities.md @@ -35,7 +35,7 @@ To achieve this goal, we will perform the following steps: :::info -Read the standard docs about including [LSP17-ContractExtension in the Universal Profile](../../../standards/universal-profile/lsp0-erc725account.md#lsp17---contract-extension). +Read the standard docs about including [LSP17-ContractExtension in the Universal Profile](../../../standards/accounts/lsp0-erc725account.md#lsp17---contract-extension). ::: @@ -217,7 +217,7 @@ The address calling the `setData(..)` function needs to have `ADDEXTENSIONS` and ::: -We need to encode the function selector of `tipMe(..)` and store it in the Universal Profile with a specific data key according to the [LSP17-ContractExtension](../../../standards/generic-standards/lsp17-contract-extension.md) standard. +We need to encode the function selector of `tipMe(..)` and store it in the Universal Profile with a specific data key according to the [LSP17-ContractExtension](../../../standards/accounts/lsp17-contract-extension.md) standard. #### Prepare data key and data value @@ -456,7 +456,7 @@ The address calling the `setData(..)` function needs to have `ADDEXTENSIONS` and ::: -We need to encode the function selector of `supportsInterface(..)` and store it in the Universal Profile with a specific data key according to the [LSP17-ContractExtension](../../../standards/generic-standards/lsp17-contract-extension.md) standard. +We need to encode the function selector of `supportsInterface(..)` and store it in the Universal Profile with a specific data key according to the [LSP17-ContractExtension](../../../standards/accounts/lsp17-contract-extension.md) standard. ```js import { ERC725YDataKeys } from '@lukso/lsp-smart-contracts'; diff --git a/docs/learn/universal-profile/advanced-guides/upgrade-key-manager.md b/docs/learn/universal-profile/advanced-guides/upgrade-key-manager.md index 30259f1529..9fa5732137 100644 --- a/docs/learn/universal-profile/advanced-guides/upgrade-key-manager.md +++ b/docs/learn/universal-profile/advanced-guides/upgrade-key-manager.md @@ -54,7 +54,7 @@ npm install web3 @lukso/lsp-smart-contracts Create a JavaScript file and add the following imports on the top of the file: -- `privateKey`: private key of a controller address, **MUST** have [**CHANGEOWNER**](../../../standards/universal-profile/lsp6-key-manager.md#permissions) permission. +- `privateKey`: private key of a controller address, **MUST** have [**CHANGEOWNER**](../../../standards/access-control/lsp6-key-manager.md#permissions) permission. - `universalProfileAddress`: address of your Universal Profile. @@ -95,7 +95,7 @@ const universalProfileAddress = '0x...'; ## Step 2 - Initialize the controller -> **Requirement:** the EOA controller that we will use MUST have the [**`CHANGEOWNER`**](../../../standards/universal-profile/lsp6-key-manager.md#permissions) permission on the UP +> **Requirement:** the EOA controller that we will use MUST have the [**`CHANGEOWNER`**](../../../standards/access-control/lsp6-key-manager.md#permissions) permission on the UP diff --git a/docs/learn/universal-profile/connect-profile/connect-up.md b/docs/learn/universal-profile/connect-profile/connect-up.md index 09a278db95..07b70854a0 100644 --- a/docs/learn/universal-profile/connect-profile/connect-up.md +++ b/docs/learn/universal-profile/connect-profile/connect-up.md @@ -9,7 +9,7 @@ import TabItem from '@theme/TabItem'; # Connect a Universal Profile -There are several methods to connect to a [Universal Profile](../../../standards/universal-profile/introduction.md), each catering to different developer requirements and scenarios. Below, we detail the most common approaches and explain why a developer might prefer one over the others. +There are several methods to connect to a [Universal Profile](../../../standards/accounts/introduction.md), each catering to different developer requirements and scenarios. Below, we detail the most common approaches and explain why a developer might prefer one over the others. Connecting to the [Universal Profile Browser Extension](https://chromewebstore.google.com/detail/universal-profiles/abpickdkkbnbcoepogfhkhennhfhehfn) will trigger the following connection screen: @@ -25,7 +25,7 @@ Connecting to the [Universal Profile Browser Extension](https://chromewebstore.g :::success Request Handling -The [Universal Profile Extension](/install-up-browser-extension) returns the address of the connected [Universal Profile](../../../standards/universal-profile/introduction.md). Making transactions is the same as with any wallet, you just use the profile address as a `from` in your transactions. +The [Universal Profile Extension](/install-up-browser-extension) returns the address of the connected [Universal Profile](../../../standards/accounts/introduction.md). Making transactions is the same as with any wallet, you just use the profile address as a `from` in your transactions. ::: diff --git a/docs/learn/universal-profile/connect-profile/siwe.md b/docs/learn/universal-profile/connect-profile/siwe.md index caf6ce52a3..bade3b551c 100644 --- a/docs/learn/universal-profile/connect-profile/siwe.md +++ b/docs/learn/universal-profile/connect-profile/siwe.md @@ -162,7 +162,7 @@ const hashedMessage = web3.eth.accounts.hashMessage(siweMessage); ## Verify the signature -Your dApp has now received a message signed by the controller address of the Universal Profile. To finalise the login, you need to verify if the message was signed by an address which has the [`SIGN`](../../../standards/universal-profile/lsp6-key-manager.md#permissions) permission for this Universal Profile. +Your dApp has now received a message signed by the controller address of the Universal Profile. To finalise the login, you need to verify if the message was signed by an address which has the [`SIGN`](../../../standards/access-control/lsp6-key-manager.md#permissions) permission for this Universal Profile. To check the signature, you can use the [`isValidSignature(...)`](../../../contracts/contracts/UniversalProfile.md#isvalidsignature) method of the [EIP-1271](https://eips.ethereum.org/EIPS/eip-1271) standardization. If the signature is valid, the method will return the magic value `0x1626ba7e`, indicating a successful verification. diff --git a/docs/learn/universal-profile/getting-started.md b/docs/learn/universal-profile/getting-started.md index 4ef3a5d114..7c4e60d6f1 100644 --- a/docs/learn/universal-profile/getting-started.md +++ b/docs/learn/universal-profile/getting-started.md @@ -8,7 +8,7 @@ import CallToActionButton from '@site/src/components/CallToActionButton'; # Getting started building dApps with 🆙 -When building dApps on LUKSO, you are interacting with [Universal Profiles](../../standards/universal-profile/introduction.md) through the [Universal Profile Browser Extension](https://chromewebstore.google.com/detail/universal-profiles/abpickdkkbnbcoepogfhkhennhfhehfn). This page guides you on the first step to get started building on LUKSO with the 🆙 Browser Extension. +When building dApps on LUKSO, you are interacting with [Universal Profiles](../../standards/accounts/introduction.md) through the [Universal Profile Browser Extension](https://chromewebstore.google.com/detail/universal-profiles/abpickdkkbnbcoepogfhkhennhfhehfn). This page guides you on the first step to get started building on LUKSO with the 🆙 Browser Extension. @@ -194,12 +194,12 @@ function executeRelayCall( ) external payable returns (bytes); ``` -| Parameter | | -| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `nonce` | The nonce of the address (= controller) that will sign the `executeRelayCall`. Retrieved via [`getNonce`](../../../contracts/contracts/LSP6KeyManager/LSP6KeyManager.md#getnonce) on the [Key Manager](../../../standards/universal-profile/lsp6-key-manager.md) | -| `channelId` | The channel where the call will be registered after execution. Define to execute the call either in parallel (across different channels) of other relay calls, or require it to be executed after another call.

📓 See [**"Out of order execution"**](../../../standards/universal-profile/lsp6-key-manager.md#out-of-order-execution) for more details | -| `validityTimestamp` | Define the time interval during which the payload can be executed. Use a value of `0` to make the transaction always valid for an undefinite period of time.

📓 See section [**Contracts > Execute Relay Calls > Validity Timestamps**](../../../contracts/overview/ExecuteRelayCall.md#validity-timestamps) for more details. | -| `payload` | The actual function being called (as an abi-encoded calldata from [**step 2**](#step-2---encode-the-calldata)) on the Universal Profile contract. In this example, the transaction payload will be a basic LYX transfer. | +| Parameter | | +| :------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `nonce` | The nonce of the address (= controller) that will sign the `executeRelayCall`. Retrieved via [`getNonce`](../../../contracts/contracts/LSP6KeyManager/LSP6KeyManager.md#getnonce) on the [Key Manager](../../../standards/access-control/lsp6-key-manager.md) | +| `channelId` | The channel where the call will be registered after execution. Define to execute the call either in parallel (across different channels) of other relay calls, or require it to be executed after another call.

📓 See [**"Out of order execution"**](../../../standards/access-control/lsp6-key-manager.md#out-of-order-execution) for more details | +| `validityTimestamp` | Define the time interval during which the payload can be executed. Use a value of `0` to make the transaction always valid for an undefinite period of time.

📓 See section [**Contracts > Execute Relay Calls > Validity Timestamps**](../../../contracts/overview/ExecuteRelayCall.md#validity-timestamps) for more details. | +| `payload` | The actual function being called (as an abi-encoded calldata from [**step 2**](#step-2---encode-the-calldata)) on the Universal Profile contract. In this example, the transaction payload will be a basic LYX transfer. | @@ -261,7 +261,7 @@ const abiPayload = universalProfile.methods :::tip Signature Details -For more information regarding the construction of an LSP25 signature, see [**"Signing Relay Transactions"**](../../../standards/universal-profile/lsp6-key-manager.md#how-to-sign-relay-transactions). +For more information regarding the construction of an LSP25 signature, see [**"Signing Relay Transactions"**](../../../standards/access-control/lsp6-key-manager.md#how-to-sign-relay-transactions). ::: diff --git a/docs/learn/universal-profile/key-manager/get-controller-permissions.md b/docs/learn/universal-profile/key-manager/get-controller-permissions.md index e5ff8804e7..9c74f66faf 100644 --- a/docs/learn/universal-profile/key-manager/get-controller-permissions.md +++ b/docs/learn/universal-profile/key-manager/get-controller-permissions.md @@ -24,7 +24,7 @@ Alongside each controller, we will also retrieve their associated permissions. A ## Setup -We will use the [`erc725.js`](../../../tools/libraries/erc725js/getting-started.md) library to easily query and decode the [`AddressPermissions[]`](../../../standards/universal-profile/lsp6-key-manager.md#retrieving-list-of-controllers) and [`AddressPermissions:Permissions:`](../../../standards/universal-profile/lsp6-key-manager.md#address-permissions) data keys on the Universal Profile. +We will use the [`erc725.js`](../../../tools/libraries/erc725js/getting-started.md) library to easily query and decode the [`AddressPermissions[]`](../../../standards/access-control/lsp6-key-manager.md#retrieving-list-of-controllers) and [`AddressPermissions:Permissions:`](../../../standards/access-control/lsp6-key-manager.md#address-permissions) data keys on the Universal Profile. ```bash npm install @erc725/erc725.js @@ -55,7 +55,7 @@ const erc725 = new ERC725( ## Step 2 - Get the list of controllers -You can now simply query the [`AddressPermissions[]`](../../../standards/universal-profile/lsp6-key-manager.md#retrieving-addresses-with-permissions) data key with the [`getData('AddressPermissions[]')`](../../../tools/libraries/erc725js/methods.md#getdata) function from _erc725.js_. This will return you an array of addresses. +You can now simply query the [`AddressPermissions[]`](../../../standards/access-control/lsp6-key-manager.md#retrieving-addresses-with-permissions) data key with the [`getData('AddressPermissions[]')`](../../../tools/libraries/erc725js/methods.md#getdata) function from _erc725.js_. This will return you an array of addresses. ```js title="Retrieve the list of addresses that have some permissions on the 🆙." async function getPermissionedAddresses() { @@ -81,13 +81,13 @@ async function getPermissionedAddresses() { ## Step 3 - Get controller's permissions -Now that we have all the controller's addresses, You can retrieve the permissions of each individual controller by querying the data key [`AddressPermissions:Permissions:`](../../../standards/universal-profile/lsp6-key-manager.md#retrieving-addresses-with-permissions). This involves 2 steps: +Now that we have all the controller's addresses, You can retrieve the permissions of each individual controller by querying the data key [`AddressPermissions:Permissions:`](../../../standards/access-control/lsp6-key-manager.md#retrieving-addresses-with-permissions). This involves 2 steps: 1. Get the raw encoded `bytes32` permission for the controller. 2. Decode this permission value to get an object listing which permissions are set or not for this controller. diff --git a/docs/learn/universal-profile/key-manager/grant-permissions.md b/docs/learn/universal-profile/key-manager/grant-permissions.md index 304e787b18..5959e03f69 100644 --- a/docs/learn/universal-profile/key-manager/grant-permissions.md +++ b/docs/learn/universal-profile/key-manager/grant-permissions.md @@ -9,7 +9,7 @@ import TabItem from '@theme/TabItem'; # Grant Permissions -This guide will teach you how to grant [permissions](../../../standards/universal-profile/lsp6-key-manager.md#address-permissions) to any address so they can interact with your 🆙. You will learn: +This guide will teach you how to grant [permissions](../../../standards/access-control/lsp6-key-manager.md#address-permissions) to any address so they can interact with your 🆙. You will learn: - How permissions in the LSP6 Key Manager work + how to create them using [_erc725.js_](../../../tools/libraries/erc725js/getting-started.md). - How to set permissions for a third party `address` on your Universal Profile @@ -26,22 +26,22 @@ The full code of this example can be found in the 👾 [lukso-playground](https: The Key Manager enables to give permissions to any third-party address to perform certain actions on our Universal Profile (UP). This includes editing the UP's metadata, transferring LYX, tokens, and NFTs, and making any other interactions on behalf of the UP. We call such addresses **controllers**, as they can *"control"* a specific Universal Profile according to their permissions on this particular UP. -The diagram above shows that when Alice sends a transaction to the [Universal Profile](../../../standards/universal-profile/introduction.md), the UP will first call its [Key Manager](../../../standards/universal-profile/lsp6-key-manager.md) to verify that Alice is authorised to execute this action by checking its **permissions**. If the check is successful, the transaction gets executed. Otherwise, it reverts. +The diagram above shows that when Alice sends a transaction to the [Universal Profile](../../../standards/accounts/introduction.md), the UP will first call its [Key Manager](../../../standards/access-control/lsp6-key-manager.md) to verify that Alice is authorised to execute this action by checking its **permissions**. If the check is successful, the transaction gets executed. Otherwise, it reverts. These permissions are stored in the Universal Profile. **We need to update three data keys in the Universal Profile's storage when adding and granting a new controller some permissions**. -| :file_cabinet: ERC725Y data key | :page_with_curl: Description | :pen: **What should we update?** | -| -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------- | -| [`AddressPermissions[]`](../../../standards/universal-profile/lsp6-key-manager.md#retrieving-addresses-with-permissions) | The number of addresses that have permissions on our UP. | We need to **increment it by +1**. | -| [`AddressPermissions[index]`](../../../standards/universal-profile/lsp6-key-manager.md#retrieving-addresses-with-permissions) | holds a controller address at a specific index. | We need to **add the beneficiary address at the new index**. | -| [`AddressPermissions:Permissions:`](../../../standards/universal-profile/lsp6-key-manager.md#address-permissions) | this data key holds the permissions of a controller address. | We need to **add the permissions of the beneficiary address** under this data key. | +| :file_cabinet: ERC725Y data key | :page_with_curl: Description | :pen: **What should we update?** | +| ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------------------------------------- | +| [`AddressPermissions[]`](../../../standards/access-control/lsp6-key-manager.md#retrieving-addresses-with-permissions) | The number of addresses that have permissions on our UP. | We need to **increment it by +1**. | +| [`AddressPermissions[index]`](../../../standards/access-control/lsp6-key-manager.md#retrieving-addresses-with-permissions) | holds a controller address at a specific index. | We need to **add the beneficiary address at the new index**. | +| [`AddressPermissions:Permissions:`](../../../standards/access-control/lsp6-key-manager.md#address-permissions) | this data key holds the permissions of a controller address. | We need to **add the permissions of the beneficiary address** under this data key. | ## Setup To follow this guide, we will need the following libraries and packages: - [`erc725.js`](../../../tools/libraries/erc725js/getting-started.md) to encode the permissions -- The [`lsp-smart-contracts`](../../../tools/libraries/lsp-smart-contracts/getting-started.md) package to get the [Universal Profile's ABI](../../../standards/universal-profile/introduction.md) +- The [`lsp-smart-contracts`](../../../tools/libraries/lsp-smart-contracts/getting-started.md) package to get the [Universal Profile's ABI](../../../standards/accounts/introduction.md) - `web3.js` or `ethers.js` to interact with our `UniversalProfile` smart contract. @@ -86,7 +86,7 @@ const erc725 = new ERC725( More permissions are available in _erc725.js_. See the [`encodePermissions(...)`](../../../tools/libraries/erc725js/methods.md#encodepermissions) function for a complete list. -To learn about what each permission enables, see the [**Standards > LSP6 Key Manager > Permissions**](../../../standards/universal-profile/lsp6-key-manager.md#permissions) section. +To learn about what each permission enables, see the [**Standards > LSP6 Key Manager > Permissions**](../../../standards/access-control/lsp6-key-manager.md#permissions) section. ::: diff --git a/docs/learn/universal-profile/metadata/read-profile-data.md b/docs/learn/universal-profile/metadata/read-profile-data.md index 4c7b7cc6bb..1005e7b8fc 100644 --- a/docs/learn/universal-profile/metadata/read-profile-data.md +++ b/docs/learn/universal-profile/metadata/read-profile-data.md @@ -118,11 +118,11 @@ You can find all data keys on the [ERC725Y Inspect](https://erc725-inspect.lukso We can also retrieve any of the specific data keys below: -- `SupportedStandards:LSP3Profile` used to know if the contract contains some metadata to display as a profile. [More details found here](../../../standards/universal-profile/lsp3-profile-metadata#supportedstandardslsp3profile) +- `SupportedStandards:LSP3Profile` used to know if the contract contains some metadata to display as a profile. [More details found here](../../../standards/metadata/lsp3-profile-metadata#supportedstandardslsp3profile) - `LSP3Profile` used to retrieve VerifiableURI encoded value. VerifiableURI is a reference to a JSON file that describes the Universal Profile meta data. - `LSP12IssuedAssets[]` used to retrieve assets the Universal Profile issued. - `LSP5ReceivedAssets[]` used to retrieve assets the Universal Profile received. -- `LSP1UniversalReceiverDelegate` used to retrieve the [Universal Receiver Delegate](../../../standards/generic-standards/lsp1-universal-receiver/) smart contract address set on the Universal Profile. +- `LSP1UniversalReceiverDelegate` used to retrieve the [Universal Receiver Delegate](../../../standards/accounts/lsp1-universal-receiver/) smart contract address set on the Universal Profile. ### Get the `LSP3Profile` Metadata diff --git a/docs/learn/universal-profile/metadata/register-lsp12-issued-assets.md b/docs/learn/universal-profile/metadata/register-lsp12-issued-assets.md index 6c6c12988b..4a783a22a4 100644 --- a/docs/learn/universal-profile/metadata/register-lsp12-issued-assets.md +++ b/docs/learn/universal-profile/metadata/register-lsp12-issued-assets.md @@ -11,7 +11,7 @@ import TabItem from '@theme/TabItem'; :::success Asset Authenticity -Within the [LSP4 Metadata](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md), Universal Profiles can be referenced as creators. To **authenticate the creators** of an asset, their Universal Profiles must list the asset's address under the [LSP12 Issued Assets](../../../standards/universal-profile/lsp12-issued-assets.md). Services can then validate the **on-chain cross-link** to prove authenticity. +Within the [LSP4 Metadata](../../../standards/tokens/LSP4-Digital-Asset-Metadata.md), Universal Profiles can be referenced as creators. To **authenticate the creators** of an asset, their Universal Profiles must list the asset's address under the [LSP12 Issued Assets](../../../standards/metadata/lsp12-issued-assets.md). Services can then validate the **on-chain cross-link** to prove authenticity. ::: @@ -135,7 +135,7 @@ const accounts = await web3.eth.getAccounts(); ## Encode the data keys -After setting up the array of assets, you can use the [`erc725.js`](../../../tools/libraries/erc725js/getting-started.md) library to encode the [`LSP12IssuedAssets[]`](../../../standards/universal-profile/lsp12-issued-assets/) data keys. There are two ways to encode data: +After setting up the array of assets, you can use the [`erc725.js`](../../../tools/libraries/erc725js/getting-started.md) library to encode the [`LSP12IssuedAssets[]`](../../../standards/metadata/lsp12-issued-assets/) data keys. There are two ways to encode data: - **Set the full issued assets list**: If you want to initially set issued assets on a Universal Profile or re-set all elements, you can encode the data without defining optional length or index parameters. Therefore, the issued assets will only consist of the asset addresses you provide in your array of assets. - **add, update, or remove existing issued assets**: If the Universal Profile already has issued assets, and you want to add, update, or remove certain assets, you can provide the `startingIndex` and `totalArrayLength` parameters. Therefore, your prepared array only represents a subset of all the issued assets listed in your Universal Profile. diff --git a/docs/learn/universal-profile/metadata/retrieve-owned-assets.md b/docs/learn/universal-profile/metadata/retrieve-owned-assets.md index e1db558506..817b5143cc 100644 --- a/docs/learn/universal-profile/metadata/retrieve-owned-assets.md +++ b/docs/learn/universal-profile/metadata/retrieve-owned-assets.md @@ -16,9 +16,9 @@ Simply type the name of the Universal Profile or paste its address in the search ::: -Every Universal Profile deployed with the [**🧩 Universal Profile Browser Extension**](/install-up-browser-extension) comes with a 📢 [Universal Receiver delegate](../../../standards/generic-standards/lsp1-universal-receiver-delegate.md) that register automatically the list of assets it owns. +Every Universal Profile deployed with the [**🧩 Universal Profile Browser Extension**](/install-up-browser-extension) comes with a 📢 [Universal Receiver delegate](../../../standards/accounts/lsp1-universal-receiver-delegate.md) that register automatically the list of assets it owns. -This guide shows you how to easily retrieve the list of owned asset, by fetching the values stored under the [`LSP5ReceivedAssets[]`](../../../standards/universal-profile/lsp5-received-assets.md#lsp5receivedassets) data key. +This guide shows you how to easily retrieve the list of owned asset, by fetching the values stored under the [`LSP5ReceivedAssets[]`](../../../standards/metadata/lsp5-received-assets.md#lsp5receivedassets) data key. ## Using erc725.js @@ -28,7 +28,7 @@ The [erc725.js](../../../tools/libraries/erc725js/getting-started.md) enable us npm i @erc725/erc725.js ``` -We can then simply import the JSON schema of the [LSP5ReceivedAssets](../../../standards/universal-profile/lsp5-received-assets.md), create an instance of the library connected to our Universal Profile and fetch the `LSP5ReceivedAssets[]` data key to retrieve all the asset addresses. +We can then simply import the JSON schema of the [LSP5ReceivedAssets](../../../standards/metadata/lsp5-received-assets.md), create an instance of the library connected to our Universal Profile and fetch the `LSP5ReceivedAssets[]` data key to retrieve all the asset addresses. ```ts import { ERC725 } from '@erc725/erc725.js'; diff --git a/docs/learn/universal-profile/universal-receiver/accept-reject-assets.md b/docs/learn/universal-profile/universal-receiver/accept-reject-assets.md index 92477b163c..8c4932911e 100644 --- a/docs/learn/universal-profile/universal-receiver/accept-reject-assets.md +++ b/docs/learn/universal-profile/universal-receiver/accept-reject-assets.md @@ -109,7 +109,7 @@ If you do not have enough LYXt, request them from the [LUKSO Testnet Faucet](../ You have successfully deployed your **CustomUniversalReceiverDelegate** contract on LUKSO Testnet! 🙌🏻 -We now need to set its address under the **[LSP1-UniversalReceiverDelegate Data Key](../../../standards/generic-standards/lsp1-universal-receiver.md#extension)** inside the UP's storage. We will do that **via a custom script in step 2** using web3.js or ether.js. +We now need to set its address under the **[LSP1-UniversalReceiverDelegate Data Key](../../../standards/accounts/lsp1-universal-receiver.md#extension)** inside the UP's storage. We will do that **via a custom script in step 2** using web3.js or ether.js. ### 2 - Install dependencies for script @@ -369,7 +369,7 @@ contract CustomUniversalReceiverDelegate is LSP1UniversalReceiverDelegateUP { The code above will register the address of the assets allowed and remove them when the UP's balance for this asset is 0. It will also reject assets that are not allowed. -Since this code will need **[SUPER_SETDATA Permission](../../../standards/universal-profile/lsp6-key-manager.md#super-permissions)**, after deploying it, you will set the address of the URD in the storage using the code from the **[Set the address of the URD in the storage](./deploy-universal-receiver.md#set-the-address-of-the-urd-in-the-storage)** section. +Since this code will need **[SUPER_SETDATA Permission](../../../standards/access-control/lsp6-key-manager.md#super-permissions)**, after deploying it, you will set the address of the URD in the storage using the code from the **[Set the address of the URD in the storage](./deploy-universal-receiver.md#set-the-address-of-the-urd-in-the-storage)** section. :::info diff --git a/docs/learn/universal-profile/universal-receiver/create-receiver-forwarder.md b/docs/learn/universal-profile/universal-receiver/create-receiver-forwarder.md index 7501419b2f..045af55904 100644 --- a/docs/learn/universal-profile/universal-receiver/create-receiver-forwarder.md +++ b/docs/learn/universal-profile/universal-receiver/create-receiver-forwarder.md @@ -9,7 +9,7 @@ import TabItem from '@theme/TabItem'; # Create a Token Forwarder -This guide will teach you how to create a basic custom [Universal Receiver Delegate](../../../standards/generic-standards/lsp1-universal-receiver-delegate.md) contract for the following use-case: +This guide will teach you how to create a basic custom [Universal Receiver Delegate](../../../standards/accounts/lsp1-universal-receiver-delegate.md) contract for the following use-case: > **"As a Universal Profile (UP) owner, I want to transfer part of the tokens I received to another UP"**. @@ -71,7 +71,7 @@ To re-transfer a portion of the tokens received, we can instruct the LSP1 Forwar - **method 1:** via the [**`execute(...)` function of the 🆙**](../../../contracts/contracts/UniversalProfile/UniversalProfile.md#execute). - **method 2:** directly on the LSP7 contract **after having authorized the LSP1 Forwarder as an operator via [`authorizeOperator(...)`](../../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#authorizeoperator)**. -For method 1 to work, the LSP1 Forwarder contract will need the permissions [`SUPER_CALL` + `REENTRANCY`](../../../standards/universal-profile/lsp6-key-manager.md#permissions) on the UP. +For method 1 to work, the LSP1 Forwarder contract will need the permissions [`SUPER_CALL` + `REENTRANCY`](../../../standards/access-control/lsp6-key-manager.md#permissions) on the UP. For method 2 to work, the LSP1 Forwarder contract needs to be authorized as an operator at the LSP7 level (using [`authorizeOperator`](../../../../contracts/contracts/LSP7DigitalAsset/#authorizeoperator)) with unlimited amount (`type(uint256).max`). @@ -538,7 +538,7 @@ Now that we have deployed our custom LSP1 Forwarder contract, we will register i We will register this LSP1 Forwarder for the LSP1 Type Id [`LSP7Tokens_RecipientNotification`](../../../contracts/type-ids.md#lsp7tokens_recipientnotification). This type Id is used to notify the Universal Profile that it received some new tokens. -To do that, use the [`LSP1UniversalReceiverDelegate:`](../../../standards/generic-standards/lsp1-universal-receiver-delegate.md#lsp1universalreceiverdelegate-mapping) Mapping data key, where the `` part will be the type Id. The _erc725.js_ library will enable us to do that easily. +To do that, use the [`LSP1UniversalReceiverDelegate:`](../../../standards/accounts/lsp1-universal-receiver-delegate.md#lsp1universalreceiverdelegate-mapping) Mapping data key, where the `` part will be the type Id. The _erc725.js_ library will enable us to do that easily. ```ts import ethers from 'ethers'; diff --git a/docs/learn/universal-profile/universal-receiver/deploy-universal-receiver.md b/docs/learn/universal-profile/universal-receiver/deploy-universal-receiver.md index 04a960a9c3..b9665cbc40 100644 --- a/docs/learn/universal-profile/universal-receiver/deploy-universal-receiver.md +++ b/docs/learn/universal-profile/universal-receiver/deploy-universal-receiver.md @@ -8,7 +8,7 @@ import TabItem from '@theme/TabItem'; # Universal Receiver -This guide will teach you how to deploy and set the default implementation of the **[Universal Receiver Delegate](../../../contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP/LSP1UniversalReceiverDelegateUP.md)** (URD) used by the Universal Profile. The URD will register the addresses of the **[received assets](../../../standards/universal-profile/lsp5-received-assets.md)** and **[vaults](../../../standards/universal-profile/lsp10-received-vaults.md)** and remove them on a balance equal to 0. It requires the [**`SUPER_SETDATA` and `REENTRANCY` permissions**](../../../standards/universal-profile/lsp6-key-manager.md#super-permissions) to interact with the 🆙. +This guide will teach you how to deploy and set the default implementation of the **[Universal Receiver Delegate](../../../contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP/LSP1UniversalReceiverDelegateUP.md)** (URD) used by the Universal Profile. The URD will register the addresses of the **[received assets](../../../standards/metadata/lsp5-received-assets.md)** and **[vaults](../../../standards/metadata/lsp10-received-vaults.md)** and remove them on a balance equal to 0. It requires the [**`SUPER_SETDATA` and `REENTRANCY` permissions**](../../../standards/access-control/lsp6-key-manager.md#super-permissions) to interact with the 🆙.
@@ -20,20 +20,20 @@ If you created your UP with [my.universalprofile.cloud/create](https://my.univer Setting a new default Universal Receiver Delegate (URD) contract will replace this default one and might affect the behaviour of your UP (for instance, not register your newly received assets). -This guide is more intended for any generic ERC725Y contract that is looking to implement solely the [LSP1 Delegate extension functionality](../../../standards/generic-standards/lsp1-universal-receiver-delegate.md#lsp1---universal-receiver-delegate). +This guide is more intended for any generic ERC725Y contract that is looking to implement solely the [LSP1 Delegate extension functionality](../../../standards/accounts/lsp1-universal-receiver-delegate.md#lsp1---universal-receiver-delegate). ::: ### Advantages -The [Universal Receiver](../../../standards/generic-standards/lsp1-universal-receiver.md) is a powerful tool that enables any smart contract or dApp to identify specific incoming transactions and automatically initiate customized responses. This provides several advantages. +The [Universal Receiver](../../../standards/accounts/lsp1-universal-receiver.md) is a powerful tool that enables any smart contract or dApp to identify specific incoming transactions and automatically initiate customized responses. This provides several advantages. - **Flexibility**: The Universal Receiver offers flexibility in assigning customized responses to external contracts. -- **Customization**: These responses can be assigned to external contracts, known as [Universal Receiver Delegate](../../../standards/generic-standards/lsp1-universal-receiver-delegate.md), which can have their own unique mechanisms for various purposes. +- **Customization**: These responses can be assigned to external contracts, known as [Universal Receiver Delegate](../../../standards/accounts/lsp1-universal-receiver-delegate.md), which can have their own unique mechanisms for various purposes. A contract implementing LSP1 can host multiple Universal Receiver Delegate (URD) smart contracts. This enables one to manage how to respond to specific interactions based on your own predefined rules. -To delegate incoming Universal Receiver notifications to a specific smart contract, set an [ERC725Y](../../../standards/universal-profile/lsp0-erc725account#erc725y---generic-key-value-store) data key on your Universal Profile. This will instruct your profile to forward notifications to the designated contract. +To delegate incoming Universal Receiver notifications to a specific smart contract, set an [ERC725Y](../../../standards/accounts/lsp0-erc725account#erc725y---generic-key-value-store) data key on your Universal Profile. This will instruct your profile to forward notifications to the designated contract. You can a Universal Receiver Delegate contracts using one of the following _data keys_: @@ -270,11 +270,11 @@ const universalProfileURDAddress = await deployUniversalProfileURD(); ## Step 3 - Set the address of the URD in the storage -After deploying the contract, we need to set its address under the **[LSP1-UniversalReceiverDelegate Data Key](../../../standards/generic-standards/lsp1-universal-receiver.md#extension)** and grant it the **[SUPER_SETDATA](../../../standards/universal-profile/lsp6-key-manager.md#super-permissions)** permission. +After deploying the contract, we need to set its address under the **[LSP1-UniversalReceiverDelegate Data Key](../../../standards/accounts/lsp1-universal-receiver.md#extension)** and grant it the **[SUPER_SETDATA](../../../standards/access-control/lsp6-key-manager.md#super-permissions)** permission. ### Create an UP contract instance -Firstly we need to create an instance for the [**Universal Profile**](../../../standards/universal-profile/lsp0-erc725account.md) contract. +Firstly we need to create an instance for the [**Universal Profile**](../../../standards/accounts/lsp0-erc725account.md) contract. @@ -306,7 +306,7 @@ const universalProfile = new web3.eth.Contract( ### Register URD on the UP + set the URD permissions -Generate _Data Keys & Values_ for [**adding a URD**](../../../standards/generic-standards/lsp1-universal-receiver-delegate.md#how-delegation-works) to the Universal Profile and for granting [**SUPER_SETDATA**](../../../standards/universal-profile/lsp6-key-manager.md#super-permissions) permission to the **URD**. +Generate _Data Keys & Values_ for [**adding a URD**](../../../standards/accounts/lsp1-universal-receiver-delegate.md#how-delegation-works) to the Universal Profile and for granting [**SUPER_SETDATA**](../../../standards/access-control/lsp6-key-manager.md#super-permissions) permission to the **URD**. diff --git a/docs/learn/vault/create-a-vault.md b/docs/learn/vault/create-a-vault.md index 73ee7ede2b..c06dcbeca7 100644 --- a/docs/learn/vault/create-a-vault.md +++ b/docs/learn/vault/create-a-vault.md @@ -14,7 +14,7 @@ This guide might contain outdated information and will be updated soon. ::: -This guide will teach you how to deploy an **[LSP9Vault](../../contracts/contracts/LSP9Vault/LSP9Vault.md)** contract. This contract can be used to **hold assets** such as tokens and NFTs. Also can be used with a [UniversalProfile](../../standards/universal-profile/introduction.md) and a [KeyManager](../../standards/universal-profile/lsp6-key-manager.md) to **restrict some addresses** (protocols, friends, etc..) to execute and setData on it, instead of setting or executing directly on the profile. +This guide will teach you how to deploy an **[LSP9Vault](../../contracts/contracts/LSP9Vault/LSP9Vault.md)** contract. This contract can be used to **hold assets** such as tokens and NFTs. Also can be used with a [UniversalProfile](../../standards/accounts/introduction.md) and a [KeyManager](../../standards/access-control/lsp6-key-manager.md) to **restrict some addresses** (protocols, friends, etc..) to execute and setData on it, instead of setting or executing directly on the profile. ![Guide - How to create an LSP9Vault](/img/guides/lsp9/LSP9VaultGuide.jpeg) @@ -23,7 +23,7 @@ This guide will teach you how to deploy an **[LSP9Vault](../../contracts/contrac To start with this guide you will need the following things: - The _private key_ of your account, in order to send the transaction. -- The address of a [**Universal Profile**](../../standards/universal-profile/lsp0-erc725account.md) +- The address of a [**Universal Profile**](../../standards/accounts/lsp0-erc725account.md) Make sure you have the following dependencies installed before beginning this tutorial: diff --git a/docs/learn/vault/edit-vault-data.md b/docs/learn/vault/edit-vault-data.md index 84248e1050..6faf91226d 100644 --- a/docs/learn/vault/edit-vault-data.md +++ b/docs/learn/vault/edit-vault-data.md @@ -14,7 +14,7 @@ This guide might contain outdated information and will be updated soon. ::: -This guide will teach you how to set data to an **[LSP9Vault](../../contracts/contracts/LSP9Vault/LSP9Vault.md)** contract through a UniversalProfile owned by an LSP6KeyManager. Any data can be attached to the vault, and since it supports the **[LSP1-UniversalReceiver](../../standards/generic-standards/lsp1-universal-receiver.md)** standard, we will set the [**Universal Receiver Delegate**](../../contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault/LSP1UniversalReceiverDelegateVault.md) address inside the storage. +This guide will teach you how to set data to an **[LSP9Vault](../../contracts/contracts/LSP9Vault/LSP9Vault.md)** contract through a UniversalProfile owned by an LSP6KeyManager. Any data can be attached to the vault, and since it supports the **[LSP1-UniversalReceiver](../../standards/accounts/lsp1-universal-receiver.md)** standard, we will set the [**Universal Receiver Delegate**](../../contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault/LSP1UniversalReceiverDelegateVault.md) address inside the storage. ## Setting Data (Universal Receiver Delegate) @@ -221,14 +221,14 @@ const vaultURDAddress = await deployVaultURD(); ## Step 3 - Setting the URD address in the storage -The Vault's owner could be an **EOA**, or any **other smart contract**. In our case, we will suppose that the Vault's owner is a [Universal Profile](../../standards/universal-profile/introduction.md) that is controlled by a Key Manager. +The Vault's owner could be an **EOA**, or any **other smart contract**. In our case, we will suppose that the Vault's owner is a [Universal Profile](../../standards/accounts/introduction.md) that is controlled by a Key Manager. ### Create the contract instances Firstly we need to create instances for the following contracts: -- [**Vault**](../../standards/universal-profile/lsp9-vault.md) -- [**Universal Profile**](../../standards/universal-profile/lsp0-erc725account.md) +- [**Vault**](../../standards/accounts/lsp9-vault.md) +- [**Universal Profile**](../../standards/accounts/lsp0-erc725account.md) @@ -554,4 +554,4 @@ await updateVaultURD(vaultURDAddress); The **LSP9Vault** contract is an **ERC725** contract, so it shares the same way to read data as Universal Profiles and other ERC725 contracts by using **[erc725.js](../../tools/libraries/erc725js/getting-started.md)**. -You can refer to the **[Read Profile Data Guide](../universal-profile/metadata/read-profile-data)** to learn how to **fetch data** like received or issued assets from [ERC725Y Storage](../../standards/lsp-background/erc725#erc725y-generic-data-keyvalue-store). However, please note that the **Universal Profile** address has to be exchanged with the **Vault's** address. +You can refer to the **[Read Profile Data Guide](../universal-profile/metadata/read-profile-data)** to learn how to **fetch data** like received or issued assets from [ERC725Y Storage](../../standards/erc725#erc725y-generic-data-keyvalue-store). However, please note that the **Universal Profile** address has to be exchanged with the **Vault's** address. diff --git a/docs/learn/vault/grant-vault-permissions.md b/docs/learn/vault/grant-vault-permissions.md index 8c5590648e..9b63889323 100644 --- a/docs/learn/vault/grant-vault-permissions.md +++ b/docs/learn/vault/grant-vault-permissions.md @@ -32,7 +32,7 @@ Check the guide of **[granting permissions to 3rd Parties](../universal-profile/ ## Use AllowedCalls permission for the 3rd Parties -In this guide, after granting the 3rd party the permission **CALL**, we will need to **allow the address of the 3rd party** to interact with the **Vault address**. We will be using the [AllowedCalls permission](../../standards/universal-profile/lsp6-key-manager.md#allowed-calls) from the Key Manager. +In this guide, after granting the 3rd party the permission **CALL**, we will need to **allow the address of the 3rd party** to interact with the **Vault address**. We will be using the [AllowedCalls permission](../../standards/access-control/lsp6-key-manager.md#allowed-calls) from the Key Manager. ## Setup @@ -64,9 +64,9 @@ npm install ethers @lukso/lsp-smart-contracts @erc725/erc725.js ## Step 1 - Imports, Constants & EOA -For this guide we will firstly need and import the _ABIs_ for the Universal Profile & Key Manager contracts. Also we will import the `ERC725YDataKeys` to retrieve the data key for [AllowedCalls permission](../../standards/universal-profile/lsp6-key-manager.md#allowed-calls). +For this guide we will firstly need and import the _ABIs_ for the Universal Profile & Key Manager contracts. Also we will import the `ERC725YDataKeys` to retrieve the data key for [AllowedCalls permission](../../standards/access-control/lsp6-key-manager.md#allowed-calls). As constants we will need to store the addresses for the Universal Profile, Vault & the restricted third party. -Finally, we will need a private key with the proper _permissions_, in our case [**ADDCONTROLLER permission**](../../standards/universal-profile/lsp6-key-manager.md#permissions). +Finally, we will need a private key with the proper _permissions_, in our case [**ADDCONTROLLER permission**](../../standards/access-control/lsp6-key-manager.md#permissions). @@ -118,7 +118,7 @@ const myEOA = new ethers.Wallet(privateKey).connect(provider); ## Step 2 - Create UP contract instance -At this point we will create instance for the [**Universal Profile**](../../standards/universal-profile/lsp0-erc725account.md) contract. +At this point we will create instance for the [**Universal Profile**](../../standards/accounts/lsp0-erc725account.md) contract. @@ -148,7 +148,7 @@ const universalProfile = new ethers.Contract( -## Step 3 - Generate the data key-value pair for [`AllowedCalls`](../../standards/universal-profile/lsp6-key-manager.md#allowed-calls) +## Step 3 - Generate the data key-value pair for [`AllowedCalls`](../../standards/access-control/lsp6-key-manager.md#allowed-calls) Now we need to generate a data key & a data value for the **Allowed Calls** that we want for the _Third Party address_. After we do that, we will update the _Allowed Calls data key_ with the encoded **Allowed Calls** diff --git a/docs/learn/vault/interact-with-contracts.md b/docs/learn/vault/interact-with-contracts.md index 3472ba5123..14b0686f0d 100644 --- a/docs/learn/vault/interact-with-contracts.md +++ b/docs/learn/vault/interact-with-contracts.md @@ -30,7 +30,7 @@ This guide is also very similar to the guide: [**Interact with contract using a To complete this mini-guide, we will need: -- an EOA with some LYX for gas fees and the required [**permissions**](../../standards/universal-profile/lsp6-key-manager.md#permissions) for the interaction. +- an EOA with some LYX for gas fees and the required [**permissions**](../../standards/access-control/lsp6-key-manager.md#permissions) for the interaction. - the `UniversalProfile` and `LSP9Vault` contracts ABIs from the [`@lukso/lsp-smart-contracts`](https://www.npmjs.com/package/@lukso/lsp-smart-contracts) npm package. - the address of the Universal Profile. - the address of the LSP9 Vault. @@ -39,7 +39,7 @@ To complete this mini-guide, we will need: :::info -The chosen EOA needs to have [**CALL Permission**](../../standards/universal-profile/lsp6-key-manager.md#permissions) together with [**AllowedCalls**](../../standards/universal-profile/lsp6-key-manager.md#allowed-calls) or [**SUPER_CALL Pemrission**](../../standards/universal-profile/lsp6-key-manager.md#super-permissions) +The chosen EOA needs to have [**CALL Permission**](../../standards/access-control/lsp6-key-manager.md#permissions) together with [**AllowedCalls**](../../standards/access-control/lsp6-key-manager.md#allowed-calls) or [**SUPER_CALL Pemrission**](../../standards/access-control/lsp6-key-manager.md#super-permissions) ::: @@ -252,7 +252,7 @@ const vaultCalldata = vault.interface.encodeFunctionData('execute', [ ## Step 4 - Execute the calldata through the UP -The final step is to execute the encoded calldata through the Universal Profile. Since we are calling from a UP's controller address (with proper [**permissions**](../../standards/universal-profile/lsp6-key-manager.md#permissions)), the Key Manager will authorize the transaction. +The final step is to execute the encoded calldata through the Universal Profile. Since we are calling from a UP's controller address (with proper [**permissions**](../../standards/access-control/lsp6-key-manager.md#permissions)), the Key Manager will authorize the transaction. diff --git a/docs/standards/generic-standards/lsp14-ownable-2-step.md b/docs/standards/access-control/lsp14-ownable-2-step.md similarity index 99% rename from docs/standards/generic-standards/lsp14-ownable-2-step.md rename to docs/standards/access-control/lsp14-ownable-2-step.md index 639b97cee6..8f972d4860 100644 --- a/docs/standards/generic-standards/lsp14-ownable-2-step.md +++ b/docs/standards/access-control/lsp14-ownable-2-step.md @@ -1,6 +1,6 @@ --- sidebar_label: 'LSP14 - Ownable 2-Step' -sidebar_position: 3 +sidebar_position: 2 description: "LUKSO's LSP14 - Ownable2Step: an extended version of EIP173 - Contract Ownership Standard for transferring and renouncing ownership." --- diff --git a/docs/standards/universal-profile/lsp6-key-manager.md b/docs/standards/access-control/lsp6-key-manager.md similarity index 98% rename from docs/standards/universal-profile/lsp6-key-manager.md rename to docs/standards/access-control/lsp6-key-manager.md index 00cf48ef61..cb1470c986 100644 --- a/docs/standards/universal-profile/lsp6-key-manager.md +++ b/docs/standards/access-control/lsp6-key-manager.md @@ -1,6 +1,6 @@ --- sidebar_label: 'LSP6 - Key Manager' -sidebar_position: 6 +sidebar_position: 1 description: LUKSO's LSP6 - Key Manager for controlling a LUKSO LSP0ERC725Account. --- @@ -157,9 +157,9 @@ The `CHANGEEXTENSIONS` permission enables editing LSP17 extension contract addre value = 0x0000000000000000000000000000000000000000000000000000000000000020

-The `ADDUNIVERSALRECEIVERDELEGATE` permission enables to add new LSP1UniversalReceiverDelegate extension contracts for specific [Type IDs](../generic-standards/lsp1-universal-receiver.md#what-does-this-standard-represent) when no contracts extension was initially set up for a specific Type ID. +The `ADDUNIVERSALRECEIVERDELEGATE` permission enables to add new LSP1UniversalReceiverDelegate extension contracts for specific [Type IDs](../accounts/lsp1-universal-receiver.md#what-does-this-standard-represent) when no contracts extension was initially set up for a specific Type ID. -See [**LSP1 Universal Receiver > extension**](../generic-standards/lsp1-universal-receiver.md#extension) for more details. +See [**LSP1 Universal Receiver > extension**](../accounts/lsp1-universal-receiver.md#extension) for more details. > **NB** this permission also enables to set the address of the default LSP1UniversalReceiverDelegate contract under the `LSP1UniversalReceiverDelegate` data key if no address was set in the first place. @@ -176,7 +176,7 @@ The `CHANGEUNIVERSALRECEIVERDELEGATE` permission enables two things: 1. edit the address of the default LSP1UniversalReceiverDelegate contract (linked under the `LSP1UniversalReceiverDelegate` data key). 2. edit the addresses of the LSP1UniversalReceiverDelegate extension contracts linked to specific Type IDs. -See [**LSP1 Universal Receiver > extension**](../generic-standards/lsp1-universal-receiver.md#extension) for more details. +See [**LSP1 Universal Receiver > extension**](../accounts/lsp1-universal-receiver.md#extension) for more details. @@ -467,7 +467,7 @@ You can obtain the list of controllers that have some permissions on the linked - **key:** `0xdf30dba06db6a30e65354d9a64c609861f089545ca58c6b4dbe31a5f338cb0e3` - **value return:** the total number of address that have some permissions set (= array length) -Each controller can be retrieved by accessing each index in the array (see [LSP2 > Array docs](../generic-standards/lsp2-json-schema.md#array) and [LSP2 > Array Standard specs](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-2-ERC725YJSONSchema.md#array) for more detailed instructions). +Each controller can be retrieved by accessing each index in the array (see [LSP2 > Array docs](../metadata/lsp2-json-schema.md#array) and [LSP2 > Array Standard specs](https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-2-ERC725YJSONSchema.md#array) for more detailed instructions). ```json { @@ -913,7 +913,7 @@ Alternatively, it they should be executed independently, they should be signed a ![LSP6 Key Manager Relay Service](/img/standards/lsp6/lsp6-multi-channel-nonce.jpeg) -Learn more about **[Multi-channel nonces](../faq/channel-nonce.md)** usecases and its internal construction. +Learn more about **[Multi-channel nonces](../accounts/lsp25-execute-relay-call.md)** usecases and its internal construction. ## References diff --git a/docs/standards/universal-profile/introduction.md b/docs/standards/accounts/introduction.md similarity index 73% rename from docs/standards/universal-profile/introduction.md rename to docs/standards/accounts/introduction.md index 8da6a9e28e..bd883a6303 100644 --- a/docs/standards/universal-profile/introduction.md +++ b/docs/standards/accounts/introduction.md @@ -17,7 +17,7 @@ You can also browse the already deployed Universal Profiles on [universalprofile Building an identity on top of keys is almost impossible because keys are likely to be leaked or lost forever. Holding assets and building a reputation on these keys makes it worse. A better representation of identity would be with blockchain-based accounts. -Blockchain-based accounts can change the way of interacting on-chain, allowing the usage of multiple components together. Used in combination with a Controller (see **[LSP6 - Key Manager](./lsp6-key-manager.md)**), they could allow any entity to execute or set some data on your profile directly or via relay execution. Finally, developers could use contracts for social recovery if keys are lost. All these components together can enhance the blockchain experience. +Blockchain-based accounts can change the way of interacting on-chain, allowing the usage of multiple components together. Used in combination with a Controller (see **[LSP6 - Key Manager](../access-control/lsp6-key-manager.md)**), they could allow any entity to execute or set some data on your profile directly or via relay execution. Finally, developers could use contracts for social recovery if keys are lost. All these components together can enhance the blockchain experience.
@@ -33,11 +33,11 @@ The architecture is based on the combination of multiple standards and smart con ## Universal Profiles Standards -| Standard | Description | -| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ![LSP0-ERC725Account](/img/standards/lsp0/lsp0-erc725account-contract.jpeg) | **[LSP0 - ERC725Account](./lsp0-erc725account.md)**: This standard represents the core account contract. It consists of [ERC725X](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-725.md#erc725x), allowing a contract to interact with any address or smart contract on the blockchain, and [ERC725Y](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-725.md#erc725y), a generic key-value store that allows storing an unlimited amount of data in the smart contract. It also contains [ERC1271](https://eips.ethereum.org/EIPS/eip-1271) to verify if messages were signed by the ERC725Account's owner. If the owner is a Key Manager supporting ERC1271, it will delegate the call to the KeyManager. Lastly, it contains the [LSP1 - UniversalReceiver](../generic-standards/lsp1-universal-receiver.md), which allows this contract to be notified of any incoming asset. Using the [LSP1 - UniversalReceiverDelegate](../generic-standards/lsp1-universal-receiver-delegate.md) logic, you can delegate the universal receiver call that an asset will do to an external contract, customizing the behaviour you want towards the asset. More on that below. | -| ![LSP6-KeyManager](/img/standards/lsp6/lsp6-key-manager-contract.jpeg) | **[LSP6 - KeyManager](./lsp6-key-manager.md)**: A standard representing a smart contract that can act as the owner of an [LSP0 - ERC725Account](./lsp0-erc725account.md). It reads permissions of addresses from the ERC725Account's key-value store, and restricts access based on these permissions. Transactions can be executed directly by permissioned users or by anyone with the help of a signed message by permissioned users. | -| ![LSP1 - UniversalReceiverDelegate](/img/standards/lsp1delegate/lsp1-universal-receiver-delegate-contract.jpeg) | **[LSP1 - UniversalReceiverDelegate](../generic-standards/lsp1-universal-receiver-delegate.md)**: By setting the **[`LSP1 - UniversalReceiverDelegate`](../generic-standards/lsp1-universal-receiver#extension)** data key in your ERC725Account to a contract address, you can delegate any call to the `universalReceiver(...)` function of the account to this contract, which allows you to revert on certain incoming assets or add other logic. The [standard **LSP1 - UniversalReceiverDelegate** implementation](../../contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP/LSP1UniversalReceiverDelegateUP.md) will write every [LSP7 and LSP8](../tokens/introduction.md) asset you receive into your ERC725Account using the [LSP5 - ReceivedAsset](./lsp5-received-assets.md) standard. This allows any interface to list all token contracts that hold a balance of your account, right from the smart contract. | +| Standard | Description | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ![LSP0-ERC725Account](/img/standards/lsp0/lsp0-erc725account-contract.jpeg) | **[LSP0 - ERC725Account](./lsp0-erc725account.md)**: This standard represents the core account contract. It consists of [ERC725X](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-725.md#erc725x), allowing a contract to interact with any address or smart contract on the blockchain, and [ERC725Y](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-725.md#erc725y), a generic key-value store that allows storing an unlimited amount of data in the smart contract. It also contains [ERC1271](https://eips.ethereum.org/EIPS/eip-1271) to verify if messages were signed by the ERC725Account's owner. If the owner is a Key Manager supporting ERC1271, it will delegate the call to the KeyManager. Lastly, it contains the [LSP1 - UniversalReceiver](../accounts/lsp1-universal-receiver.md), which allows this contract to be notified of any incoming asset. Using the [LSP1 - UniversalReceiverDelegate](../accounts/lsp1-universal-receiver-delegate.md) logic, you can delegate the universal receiver call that an asset will do to an external contract, customizing the behaviour you want towards the asset. More on that below. | +| ![LSP6-KeyManager](/img/standards/lsp6/lsp6-key-manager-contract.jpeg) | **[LSP6 - KeyManager](../access-control/lsp6-key-manager.md)**: A standard representing a smart contract that can act as the owner of an [LSP0 - ERC725Account](./lsp0-erc725account.md). It reads permissions of addresses from the ERC725Account's key-value store, and restricts access based on these permissions. Transactions can be executed directly by permissioned users or by anyone with the help of a signed message by permissioned users. | +| ![LSP1 - UniversalReceiverDelegate](/img/standards/lsp1delegate/lsp1-universal-receiver-delegate-contract.jpeg) | **[LSP1 - UniversalReceiverDelegate](../accounts/lsp1-universal-receiver-delegate.md)**: By setting the **[`LSP1 - UniversalReceiverDelegate`](../accounts/lsp1-universal-receiver#extension)** data key in your ERC725Account to a contract address, you can delegate any call to the `universalReceiver(...)` function of the account to this contract, which allows you to revert on certain incoming assets or add other logic. The [standard **LSP1 - UniversalReceiverDelegate** implementation](../../contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP/LSP1UniversalReceiverDelegateUP.md) will write every [LSP7 and LSP8](../tokens/introduction.md) asset you receive into your ERC725Account using the [LSP5 - ReceivedAsset](../metadata/lsp5-received-assets.md) standard. This allows any interface to list all token contracts that hold a balance of your account, right from the smart contract. | :::note @@ -49,17 +49,17 @@ An LSP0-ERC725Account can work standalone and doesn't require a Key Manager or a :::info How is data stored on a Universal Profile? -Each data on a Universal Profile is stored into a generic key-value [ERC725Y](../lsp-background/erc725.md#erc725y-data-representation) store which allows storing an unlimited amount of data in the smart contract. +Each data on a Universal Profile is stored into a generic key-value [ERC725Y](../erc725.md#erc725y-data-representation) store which allows storing an unlimited amount of data in the smart contract. ERC725Y standardizes a mapping of data keys to data values in order to have the ability to add or remove data across time without the need of redeploying the contract. It gives flexibility to the contract storage. On the smart contract, data keys are represented as bytes32 values and data values under these keys are stored as bytes. ::: -[LSP2 - ERC725YJSONSchema](../../../standards/generic-standards/lsp2-json-schema) is the standard used by the LSPs to organize how the data should be represented as `bytes32 => bytes` data key / value pairs. +[LSP2 - ERC725YJSONSchema](../../../standards/metadata/lsp2-json-schema) is the standard used by the LSPs to organize how the data should be represented as `bytes32 => bytes` data key / value pairs. The **[LSP0 - ERC725Account](./lsp0-erc725account.md)** standard represents a blockchain-based account that does not contain any metadata describing the account. It's important to standardize specific data keys to give the account a unique character and look like a typical **Web2 profile**. -**[LSP3 - Profile Metadata](./lsp3-profile-metadata.md)** is a standard used to add profile information by setting its defined data keys in the account storage. The combination of these two standards forms a **Universal Profile**. +**[LSP3 - Profile Metadata](../metadata/lsp3-profile-metadata.md)** is a standard used to add profile information by setting its defined data keys in the account storage. The combination of these two standards forms a **Universal Profile**. :::tip diff --git a/docs/standards/universal-profile/lsp0-erc725account.md b/docs/standards/accounts/lsp0-erc725account.md similarity index 88% rename from docs/standards/universal-profile/lsp0-erc725account.md rename to docs/standards/accounts/lsp0-erc725account.md index 99d89c6a22..1e6eb76749 100644 --- a/docs/standards/universal-profile/lsp0-erc725account.md +++ b/docs/standards/accounts/lsp0-erc725account.md @@ -20,7 +20,7 @@ An ERC725 Account overcomes the limitations of traditional blockchain accounts b [Externally Owned Accounts (EOAs)](https://ethereum.org/en/developers/docs/accounts/#externally-owned-accounts-and-key-pairs) are the primary type of **account** in Ethereum, controlled by a private key. If the private key is **compromised**, anyone can execute transactions from the account and access any assets it holds. EOAs have no built-in mechanism for attaching any information or data, making identifying the person or entity using the account challenging. They can only perform simple interactions using the **[CALL](https://www.evm.codes/#f1)** opcode and create contracts using the **[CREATE](https://www.evm.codes/#f0)** opcode. -These issues can be addressed by the **[ERC725](../lsp-background/erc725.md)** standard, which provides more operations to execute and a flexible way to attach data for the contract even after it has been deployed. +These issues can be addressed by the **[ERC725](../erc725.md)** standard, which provides more operations to execute and a flexible way to attach data for the contract even after it has been deployed. However, for a smart contract-based account to be viable in the long term, it should have much more functionalities than the ability to execute and to attach data. The features that makes a smart contract an account are: @@ -36,19 +36,19 @@ An **ERC725Account** is a blockchain account system that can be utilized by indi - **[ERC165](https://eips.ethereum.org/EIPS/eip-165)** allows to register and detect the standard interfaces and standards that the contract implements, or will implement in the future. -- **[ERC725X](../lsp-background/erc725.md#erc725x---generic-executor)** is a generic executor that enables calling external contracts with different operations such as [**CALL**](https://www.evm.codes/#f1), [**STATICCALL**](https://eips.ethereum.org/EIPS/eip-214) and [**DELEGATECALL**](https://eips.ethereum.org/EIPS/eip-7). It also allows deploying new contracts with [**CREATE**](https://www.evm.codes/#f0) or [**CREATE2**](https://eips.ethereum.org/EIPS/eip-1014), or transferring value to any address (EOA or smart contracts). +- **[ERC725X](../erc725.md#erc725x---generic-executor)** is a generic executor that enables calling external contracts with different operations such as [**CALL**](https://www.evm.codes/#f1), [**STATICCALL**](https://eips.ethereum.org/EIPS/eip-214) and [**DELEGATECALL**](https://eips.ethereum.org/EIPS/eip-7). It also allows deploying new contracts with [**CREATE**](https://www.evm.codes/#f0) or [**CREATE2**](https://eips.ethereum.org/EIPS/eip-1014), or transferring value to any address (EOA or smart contracts). -- **[ERC725Y](../lsp-background/erc725.md#erc725y---generic-data-keyvalue-store)** is a generic key-value store that enables it to **attach any information** to the smart contract even after it's been deployed. +- **[ERC725Y](../erc725.md#erc725y---generic-data-keyvalue-store)** is a generic key-value store that enables it to **attach any information** to the smart contract even after it's been deployed. - **[ERC1271](https://eips.ethereum.org/EIPS/eip-1271)** helps to **verify the validity** of a message and signature. -- **[LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md)** enables **notifications about incoming or outgoing transactions** and adds custom handling and behavior based on these transactions. +- **[LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md)** enables **notifications about incoming or outgoing transactions** and adds custom handling and behavior based on these transactions. -- **[LSP14-Ownable2Step](../generic-standards/lsp14-ownable-2-step.md)** enables a **secure ownership management** system. +- **[LSP14-Ownable2Step](../access-control/lsp14-ownable-2-step.md)** enables a **secure ownership management** system. -- **[LSP17-ContractExtension](../generic-standards/lsp17-contract-extension.md)** enables the contract to be **extended after deployment** to support new standard and functionalities. +- **[LSP17-ContractExtension](../accounts/lsp17-contract-extension.md)** enables the contract to be **extended after deployment** to support new standard and functionalities. -- **[LSP20-CallVerification](../../standards/generic-standards/lsp20-call-verification.md)** provides a unified and standard way for all addresses to **interact directly with the account**. This streamlines the interaction process considering the ownership setup, and enhancing accessibility and developer experience. +- **[LSP20-CallVerification](../../standards/accounts/lsp20-call-verification.md)** provides a unified and standard way for all addresses to **interact directly with the account**. This streamlines the interaction process considering the ownership setup, and enhancing accessibility and developer experience. ![LSP0 modules diagram](/img/standards/lsp0/LSP0-modules-diagram.jpeg) @@ -56,7 +56,7 @@ An **ERC725Account** is a blockchain account system that can be utilized by indi :::tip -See the **[ERC725](../lsp-background//erc725.md)** standard for more information. +See the **[ERC725](../erc725.md)** standard for more information. Check the [**execute functions**](../../contracts/contracts/LSP0ERC725Account/LSP0ERC725Account.md#execute) provided by **ERC725X** that allows the contract to execute multiple operations. @@ -102,7 +102,7 @@ The following types of calls (operation types) are available: :::tip -See the **[ERC725](../lsp-background//erc725.md)** standard for more information. +See the **[ERC725](../erc725.md)** standard for more information. Check the [**setData functions**](../../contracts/contracts/LSP0ERC725Account/LSP0ERC725Account.md#setdata) provided by **ERC725Y** that allows attaching data to the contract. @@ -145,7 +145,7 @@ When the owner is a smart contract, the `isValidSignature(..)` function will be :::tip -See the **[LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md)** standard for more information. +See the **[LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md)** standard for more information. Check the [**universalReceiver functions**](../../contracts/contracts/LSP0ERC725Account/LSP0ERC725Account.md#universalreceiver) provided by **LSP1** that allows notifying about incoming/ outgoing transactions. @@ -155,7 +155,7 @@ Check the **javascript** guides to know [**How to set a UniversalReceiverDelegat This standard enables the account to be notified of incoming transactions such as token transfer, vault transfer, information transfer, etc. Notifications are handy for situations where users want to customize how their account contract reacts to certain tokens by either rejecting them or operating a specific call on each token received. -The **[LSP0-ERC725Account](../../standards/universal-profile/lsp0-erc725account.md)** implements the `universalReceiver(..)` function that: +The **[LSP0-ERC725Account](../../standards/accounts/lsp0-erc725account.md)** implements the `universalReceiver(..)` function that: Emits an [`UniversalReceiver`](../../contracts/contracts/LSP0ERC725Account/LSP0ERC725Account.md#universalreceiver-1) event with the `typeId` and `data`, as well as additional parameters such as the amount sent to the function, the caller of the function, and the return value of the delegate contracts. @@ -191,7 +191,7 @@ The **UniversalReceiverDelegate** contracts **provides optional interactions** t :::tip -See the **[LSP14 - Ownable2Step](../generic-standards/lsp14-ownable-2-step.md)** standard for more information. +See the **[LSP14 - Ownable2Step](../access-control/lsp14-ownable-2-step.md)** standard for more information. Check the [**LSP14 functions**](../../contracts/contracts/LSP14Ownable2Step/LSP14Ownable2Step.md) allowing 2 step ownership transfers. @@ -199,7 +199,7 @@ Check the [**LSP14 functions**](../../contracts/contracts/LSP14Ownable2Step/LSP1 An account that holds valuable assets and represents your digital identity should be secure to prevent mistakes that may result in losing it. Therefore, a safe and secure ownership management system should be in place for this account. -**LSP14-Ownable2Step** is a standard that allows for the ownership of an account to be transferred or renounced through a 2-step process, making it more resistant to phishing attacks. This standard allows for any address, such as an EOA or smart contract, to be the owner of the account. The owner can be a **voting contract**, or a **multisig**, or a **KeyManager** that allow for permission-based access control. (Check **[LSP6-KeyManager](../universal-profile/lsp6-key-manager.md)**) +**LSP14-Ownable2Step** is a standard that allows for the ownership of an account to be transferred or renounced through a 2-step process, making it more resistant to phishing attacks. This standard allows for any address, such as an EOA or smart contract, to be the owner of the account. The owner can be a **voting contract**, or a **multisig**, or a **KeyManager** that allow for permission-based access control. (Check **[LSP6-KeyManager](../access-control/lsp6-key-manager.md)**) ![ERC725Y key-value store vs standard contract storage](/img/standards/lsp0/LSP0-Owner.jpeg) @@ -225,7 +225,7 @@ The process for renouncing ownership follows a similar structure, where an initi :::tip -See the **[LSP17 - ContractExtension](../generic-standards/lsp17-contract-extension.md)** standard for more information. +See the **[LSP17 - ContractExtension](./lsp17-contract-extension.md)** standard for more information. Check the **JavaScript** guides to know [**How to extend the functionalities and interfaceIds of an account**](../../learn/universal-profile/advanced-guides/extend-profile-functionalities.md) @@ -235,7 +235,7 @@ Check the [**fallback function**](../../contracts/contracts/LSP0ERC725Account/LS Once a smart contract based account is deployed on the blockchain, it is not possible to modify the contract to add new native functions or change the behavior of existing ones. This can be a limitation for these accounts, that may need to support new use cases, functions, and standards that may be adopted in the future. -**[LSP17-ContractExtension](../generic-standards/lsp17-contract-extension.md)** defines a mechanism for extending a contract to support new standard and functions through the use of **extensions**. +**[LSP17-ContractExtension](./lsp17-contract-extension.md)** defines a mechanism for extending a contract to support new standard and functions through the use of **extensions**. #### Support New Functions diff --git a/docs/standards/generic-standards/lsp1-universal-receiver-delegate.md b/docs/standards/accounts/lsp1-universal-receiver-delegate.md similarity index 94% rename from docs/standards/generic-standards/lsp1-universal-receiver-delegate.md rename to docs/standards/accounts/lsp1-universal-receiver-delegate.md index e3d15692a3..4dc89c11c5 100644 --- a/docs/standards/generic-standards/lsp1-universal-receiver-delegate.md +++ b/docs/standards/accounts/lsp1-universal-receiver-delegate.md @@ -1,6 +1,6 @@ --- sidebar_label: 'LSP1 - Universal Receiver Delegate' -sidebar_position: 2 +sidebar_position: 4 description: LUKSO LSP1 Universal Receiver for notifying upon incoming transactions. --- @@ -14,7 +14,7 @@ description: LUKSO LSP1 Universal Receiver for notifying upon incoming transacti :::success Recommendation -To better understand this standard, it is well-advised first to check the origin standard **[LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md)**. +To better understand this standard, it is well-advised first to check the origin standard **[LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md)**. ::: @@ -30,7 +30,7 @@ Therefore, it is advised not to hardcode how the smart contract should handle an :::success recommendation -Smart contracts implementing the [LSP1-UniversalReceiverDelegate](../../standards/generic-standards/lsp1-universal-receiver-delegate.md) standard SHOULD **register** the **[LSP1UniversalReceiverDelegate InterfaceId](../../contracts/interface-ids.md) using ERC165**. This way, other contracts can be aware that the contract supports the LSP1-UniversalReceiverDelegate standard. +Smart contracts implementing the [LSP1-UniversalReceiverDelegate](../../standards/accounts/lsp1-universal-receiver-delegate.md) standard SHOULD **register** the **[LSP1UniversalReceiverDelegate InterfaceId](../../contracts/interface-ids.md) using ERC165**. This way, other contracts can be aware that the contract supports the LSP1-UniversalReceiverDelegate standard. ::: diff --git a/docs/standards/generic-standards/lsp1-universal-receiver.md b/docs/standards/accounts/lsp1-universal-receiver.md similarity index 88% rename from docs/standards/generic-standards/lsp1-universal-receiver.md rename to docs/standards/accounts/lsp1-universal-receiver.md index 91b5639db9..492db7b360 100644 --- a/docs/standards/generic-standards/lsp1-universal-receiver.md +++ b/docs/standards/accounts/lsp1-universal-receiver.md @@ -1,6 +1,6 @@ --- sidebar_label: 'LSP1 - Universal Receiver' -sidebar_position: 1 +sidebar_position: 3 description: LUKSO LSP1 Universal Receiver Delegate. --- @@ -46,7 +46,7 @@ One way to solve this problem is by creating a **standard and unified function** :::success recommendation -Smart contracts implementing the [LSP1-UniversalReceiver](../../standards/generic-standards/lsp1-universal-receiver-delegate.md) standard SHOULD **register** the **[LSP1UniversalReceiver InterfaceId](../../contracts/interface-ids.md) using ERC165**. This way, other contracts can be aware that the contract supports the LSP1 standard. +Smart contracts implementing the [LSP1-UniversalReceiver](../../standards/accounts/lsp1-universal-receiver-delegate.md) standard SHOULD **register** the **[LSP1UniversalReceiver InterfaceId](../../contracts/interface-ids.md) using ERC165**. This way, other contracts can be aware that the contract supports the LSP1 standard. ::: @@ -71,7 +71,7 @@ In this way, instead of **listening to all the events of the token contrats on t As well as emitting an event, the `universalReceiver(...)` function can implement **custom logic** to make the contract behave differently based on the data received. Some ideas include: - Reverting on calls to completely disallow the smart contract from receiving assets, information, etc. :x: -- Registering the received assets inside the contract storage (see [LSP5 - Received Assets](../universal-profile/lsp5-received-assets.md)). :heavy_plus_sign: +- Registering the received assets inside the contract storage (see [LSP5 - Received Assets](../metadata/lsp5-received-assets.md)). :heavy_plus_sign: - Disallowing receiving specific tokens from specific token contract addresses, for instance (e.g: spam tokens). - Forwarding all the received assets to an external vault or a staking contract. - Forwarding specific tokens in a contract behind a protocol or dApp (e.g: liquidity or lending pool to earn interest). @@ -83,13 +83,13 @@ As well as emitting an event, the `universalReceiver(...)` function can implemen :::info -See the **[LSP1-UniversalReceiverDelegate](../generic-standards/lsp1-universal-receiver-delegate.md)** standard for more details. +See the **[LSP1-UniversalReceiverDelegate](../accounts/lsp1-universal-receiver-delegate.md)** standard for more details. ::: Overriding and customizing the `universalReceiver(..)` function is an option for users to allow **different behaviours depending on the data received**. However, it's not advised to hardcode the logic of reacting to specific actions inside the function because **this logic may need to change in the future** depending on several factors (eg. the vault where the tokens are forwarded gets compromised, a new staking contract is deployed, decided to revert on specific tokens later). -**[LSP1-UniversalReceiverDelegate](../generic-standards/lsp1-universal-receiver-delegate.md)** is an **optional extension** to the **[LSP1-UniversalReceiver](../../standards/generic-standards/lsp1-universal-receiver.md)** standard. As well as notifying a contract about the incoming and outgoing transactions by emitting an event, it can delegate the call to an external contract that can **handle and react to specific calls** with its custom logic. +**[LSP1-UniversalReceiverDelegate](../accounts/lsp1-universal-receiver-delegate.md)** is an **optional extension** to the **[LSP1-UniversalReceiver](../../standards/accounts/lsp1-universal-receiver.md)** standard. As well as notifying a contract about the incoming and outgoing transactions by emitting an event, it can delegate the call to an external contract that can **handle and react to specific calls** with its custom logic. ![Universal Receiver Delegate contract](/img/standards/lsp1/universal-receiver-delegate.jpeg) diff --git a/docs/standards/relayer-api.md b/docs/standards/accounts/lsp15-transaction-relayer-api.md similarity index 82% rename from docs/standards/relayer-api.md rename to docs/standards/accounts/lsp15-transaction-relayer-api.md index f4c57a8c94..8cb32c85b8 100644 --- a/docs/standards/relayer-api.md +++ b/docs/standards/accounts/lsp15-transaction-relayer-api.md @@ -1,6 +1,6 @@ --- -title: 📬 Relayer API -sidebar_position: 9 +title: LSP15 - Transaction Relayer API +sidebar_position: 6 description: LUKSO's Transaction Relay Service API Standard. --- @@ -13,15 +13,21 @@ import TabItem from '@theme/TabItem';
+:::caution + +This standard is for an API off-chain to create a relay service. For the on-chain part on how to construct message for relay transactions, see [LSP25 Execute Relay Call](./lsp25-execute-relay-call.md). + +::: + :::success Relayer API -To access our Relayer API, see our [**Relayer Developer Access**](../tools/services/relayer-developer.md) page. +To access our Relayer API, see our [**Relayer Developer Access**](../../tools/services/relayer-developer.md) page. ::: ## POST `/execute` -Executes a signed transaction on behalf of a Universal Profile using [`executeRelayCall()`](../contracts/contracts/LSP6KeyManager/LSP6KeyManager.md#executerelaycall). +Executes a signed transaction on behalf of a Universal Profile using [`executeRelayCall()`](../../contracts/contracts/LSP6KeyManager/LSP6KeyManager.md#executerelaycall). - Use signed message provided in request for authentication. - Calculate and return the transaction hash in response. @@ -47,7 +53,7 @@ Executes a signed transaction on behalf of a Universal Profile using [`executeRe Returns the available quota left for a registered Universal Profile. -- `signature` is the message value signed by a controller key with the [`SIGN` permission](./universal-profile/lsp6-key-manager#permissions) of the Universal Profile. The hash to sign should be calculated as [EIP-712](https://eips.ethereum.org/EIPS/eip-712) hash where the message is `keccack256(address, timestamp)`. Make sure that no matter the language or platform timestamp is of type `int`, `int256`, `uint` or `uint256`. In the backend the message is reconstructed using [soliditysha3()](https://web3js.readthedocs.io/en/v1.7.4/web3-utils.html#soliditysha3) to verify the signature. +- `signature` is the message value signed by a controller key with the [`SIGN` permission](../access-control/lsp6-key-manager#permissions) of the Universal Profile. The hash to sign should be calculated as [EIP-712](https://eips.ethereum.org/EIPS/eip-712) hash where the message is `keccack256(address, timestamp)`. Make sure that no matter the language or platform timestamp is of type `int`, `int256`, `uint` or `uint256`. In the backend the message is reconstructed using [soliditysha3()](https://web3js.readthedocs.io/en/v1.7.4/web3-utils.html#soliditysha3) to verify the signature. [Web3.js](https://web3js.readthedocs.io/en/v1.8.0/web3-eth-accounts.html?#sign) and [ethers.js](https://docs.ethers.io/v5/api/signer/#Signer-signMessage) both automatically hash when using their native sign functions. This may need to be done manually if using a different library. @@ -114,7 +120,7 @@ const signer = ethers.utils.verifyMessage(arrayify(message), signature); // Sign
-To verify if the signature was signed by an authorized EOA, please refer to the [Sign-In With Ethereum](../learn/universal-profile/connect-profile/siwe.md) guide. +To verify if the signature was signed by an authorized EOA, please refer to the [Sign-In With Ethereum](../../learn/universal-profile/connect-profile/siwe.md) guide. diff --git a/docs/standards/generic-standards/lsp17-contract-extension.md b/docs/standards/accounts/lsp17-contract-extension.md similarity index 99% rename from docs/standards/generic-standards/lsp17-contract-extension.md rename to docs/standards/accounts/lsp17-contract-extension.md index e72497f40a..474f36e0f7 100644 --- a/docs/standards/generic-standards/lsp17-contract-extension.md +++ b/docs/standards/accounts/lsp17-contract-extension.md @@ -1,6 +1,6 @@ --- sidebar_label: 'LSP17 - Contract Extension' -sidebar_position: 5 +sidebar_position: 7 description: LUKSO's LSP17 - Contract Extension for enabling smart contracts to support new functions through extensions. --- diff --git a/docs/standards/generic-standards/lsp20-call-verification.md b/docs/standards/accounts/lsp20-call-verification.md similarity index 99% rename from docs/standards/generic-standards/lsp20-call-verification.md rename to docs/standards/accounts/lsp20-call-verification.md index aecc12ac86..d5b85ced27 100644 --- a/docs/standards/generic-standards/lsp20-call-verification.md +++ b/docs/standards/accounts/lsp20-call-verification.md @@ -1,6 +1,6 @@ --- sidebar_label: 'LSP20 - Call Verification' -sidebar_position: 6 +sidebar_position: 8 description: LUKSO's LSP20 - Call Verification for delegating the the verification of a function call to another smart contract. --- diff --git a/docs/standards/faq/channel-nonce.md b/docs/standards/accounts/lsp25-execute-relay-call.md similarity index 93% rename from docs/standards/faq/channel-nonce.md rename to docs/standards/accounts/lsp25-execute-relay-call.md index db3f9cce3b..bd7030538c 100644 --- a/docs/standards/faq/channel-nonce.md +++ b/docs/standards/accounts/lsp25-execute-relay-call.md @@ -1,7 +1,7 @@ --- -title: Multi-channel nonces -sidebar_position: 1 -description: Learn about multi-channel nonces for the LUKSO Key Manager. +title: LSP25 - Execute Relay Call +sidebar_position: 9 +description: Learn about meta transactions using the LSP25 Execute Relay Call standards and how to use multi-channel nonces to dispatch transactions that are order independant or not. --- # Frequently Asked Questions diff --git a/docs/standards/generic-standards/lsp26-follower-system.md b/docs/standards/accounts/lsp26-follower-system.md similarity index 93% rename from docs/standards/generic-standards/lsp26-follower-system.md rename to docs/standards/accounts/lsp26-follower-system.md index ea3087c05b..bf1f9923c4 100644 --- a/docs/standards/generic-standards/lsp26-follower-system.md +++ b/docs/standards/accounts/lsp26-follower-system.md @@ -1,6 +1,6 @@ --- sidebar_label: 'LSP26 - Follower System' -sidebar_position: 8 +sidebar_position: 10 title: 'LSP26 - Follower System' description: LUKSO's LSP26 Follower System for managing on-chain following relationships between addresses. --- @@ -15,7 +15,7 @@ description: LUKSO's LSP26 Follower System for managing on-chain following relat ## Introduction -LSP26 introduces a Follower System that allows any address — whether it's a smart contract account like an [ERC725Account](../universal-profile/lsp0-erc725account.md), or even an Externally Owned Account (EOA) — to participate in a decentralized social graph. +LSP26 introduces a Follower System that allows any address — whether it's a smart contract account like an [ERC725Account](../accounts/lsp0-erc725account.md), or even an Externally Owned Account (EOA) — to participate in a decentralized social graph. ## What does this standard represent? @@ -67,7 +67,7 @@ The LSP26 Follower System is implemented as a smart contract with the following ## LSP1 Integration -LSP26 integrates with [LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md) to notify addresses when they are followed or unfollowed: +LSP26 integrates with [LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md) to notify addresses when they are followed or unfollowed: - When following: Calls `universalReceiver` with `typeId`: `keccak256('LSP26FollowerSystem_FollowNotification')` - When unfollowing: Calls `universalReceiver` with `typeId`: `keccak256('LSP26FollowerSystem_UnfollowNotification')` diff --git a/docs/standards/universal-profile/lsp9-vault.md b/docs/standards/accounts/lsp9-vault.md similarity index 90% rename from docs/standards/universal-profile/lsp9-vault.md rename to docs/standards/accounts/lsp9-vault.md index e05dece813..e52945c6ef 100644 --- a/docs/standards/universal-profile/lsp9-vault.md +++ b/docs/standards/accounts/lsp9-vault.md @@ -1,6 +1,6 @@ --- sidebar_label: 'LSP9 - Vault' -sidebar_position: 7 +sidebar_position: 5 description: LUKSO LSP9 - Vault for holding assets and interacting with other smart contracts. --- @@ -44,14 +44,14 @@ The following `operationType` COULD exist: This substandard enables the vault to hold arbitrary data through a generic data key/value store. It gives flexibility to the contract storage by allowing to attach any information to the contract and update it easily. :::info -The data keys and values are constructed according to the **[LSP2-ERC725YJSONSchema](../generic-standards/lsp2-json-schema.md)** standard. +The data keys and values are constructed according to the **[LSP2-ERC725YJSONSchema](../metadata/lsp2-json-schema.md)** standard. ::: ### LSP1 - UniversalReceiver :::info -See the **[LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md)** standard for more information. +See the **[LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md)** standard for more information. ::: @@ -63,7 +63,7 @@ The implementation of the **UniversalReceiverDelegate** used by the Universal Pr This standard enables the vault to be notified of incoming transactions such as token transfers, information transfers, etc. Notifications are handy when users want to customize how their account contract reacts to certain tokens by either rejecting them or operating a specific call on each received token. -The **[LSP9-Vault](../../standards/universal-profile/lsp9-vault.md)** implements the `universalReceiver(..)` function that: +The **[LSP9-Vault](../../standards/accounts/lsp9-vault.md)** implements the `universalReceiver(..)` function that: - Emits an event with the typeId and data passed to it, as well as additional parameters such as the amount sent to the function, the caller of the function, and the return value of the delegate contracts. @@ -97,7 +97,7 @@ The **[LSP9-Vault](../../standards/universal-profile/lsp9-vault.md)** implements :::info -See the **[LSP14 - Ownable2Step](../generic-standards/lsp14-ownable-2-step.md)** standard for more information. +See the **[LSP14 - Ownable2Step](../access-control/lsp14-ownable-2-step.md)** standard for more information. ::: @@ -111,7 +111,7 @@ This standard allows for the **LSP9 - Vault** contract's ownership to be control Developers could use the vault to hold assets and, as mentioned before, could be used to restrict third parties to only operate on the assets and metadata of the vault and not the Universal Profile. The Universal Profile's metadata and assets are safe if the third party tries to act maliciously. -**1.** The **protocol** should be allowed to only talk to the vault A1 through [AllowedAddresses permission](./lsp6-key-manager#address-permissions). +**1.** The **protocol** should be allowed to only talk to the vault A1 through [AllowedAddresses permission](../access-control/lsp6-key-manager#address-permissions). ![LSP9 vault allowed in profile](/img/standards/lsp9/vault-flow.jpeg) diff --git a/docs/standards/lsp-background/erc725.md b/docs/standards/erc725.md similarity index 89% rename from docs/standards/lsp-background/erc725.md rename to docs/standards/erc725.md index 2b9ce953c3..3ca6adcf15 100644 --- a/docs/standards/lsp-background/erc725.md +++ b/docs/standards/erc725.md @@ -1,6 +1,5 @@ --- -sidebar_label: 'ERC725' -sidebar_position: 1 +sidebar_label: 'ERC725 - Foundation of the LSPs' description: 'ERC725X operations: call, create, create2, staticcall, delegatecall, and ERC725Y Generic Data Key/Value Store.' --- @@ -68,7 +67,7 @@ See the section **["Layout of State Variables in Storage"](https://docs.solidity #### Normal contract vs ERC725Y -![Smart contract vs ERC725Y](../../../static/img/standards/erc725/SmartContractVsERC725Y.jpeg) +![Smart contract vs ERC725Y](/img/standards/erc725/SmartContractVsERC725Y.jpeg) Thanks to ERC725Y, contracts become more interoperable, as their storage is represented in the same way. Contracts and interfaces can then read and write data from or to the storage in the same manner via the functions `getData(...)` and `setData(...)`. @@ -76,7 +75,7 @@ Thanks to ERC725Y, contracts become more interoperable, as their storage is repr Since the data is set in the contract's storage as **bytes32**/**bytes** data key/value pair, a representation of this data should be standardized to avoid having each user writing the data in a different way and to have the ability to getData from other people's contract storage in a unified way. -**[LSP2 - ERC725YJSONSchema](../generic-standards/lsp2-json-schema.md)** is the standard used by the LSPs to organize how the data should be represented as **bytes32**/**bytes** pairs. +**[LSP2 - ERC725YJSONSchema](./metadata/lsp2-json-schema.md)** is the standard used by the LSPs to organize how the data should be represented as **bytes32**/**bytes** pairs. ## Ownership @@ -84,8 +83,8 @@ An EOA (Externally Owned Account) is controlled by a private key, which means th One solution to this problem is to use a smart contract, which can be programmed to have specific addresses that can execute transactions. -[**ERC725**](../../standards/lsp-background/erc725.md) utilizes the [**ERC173**](https://eips.ethereum.org/EIPS/eip-173) standard for ownership management. Under this standard, an address is designated as the owner of the contract, and is the only one able to interact with other addresses and create contracts using the `execute(..)` functions. The owner is also the only one able to set data in the contract using the `setData(..)` function. +§§§§eswaq **ERC725** utilizes the [**ERC173**](https://eips.ethereum.org/EIPS/eip-173) standard for ownership management. Under this standard, an address is designated as the owner of the contract, and is the only one able to interact with other addresses and create contracts using the `execute(..)` functions. The owner is also the only one able to set data in the contract using the `setData(..)` function. -![Owner ERC725](../../../static/img/standards/erc725/ERC725Owner.jpeg) +![Owner ERC725](/img/standards/erc725/ERC725Owner.jpeg) This method provides significant control over who can access and operate the contract, and eliminates the need to share private keys. The owner of the contract is defined as an address, which can be an EOA (Externally Owned Account) or another contract with specific features, such as a DAO voting contract or a KeyManager. diff --git a/docs/standards/generic-standards/lsp16-universal-factory.md b/docs/standards/factories/lsp16-universal-factory.md similarity index 99% rename from docs/standards/generic-standards/lsp16-universal-factory.md rename to docs/standards/factories/lsp16-universal-factory.md index 5bd51c3b55..31d01ebeab 100644 --- a/docs/standards/generic-standards/lsp16-universal-factory.md +++ b/docs/standards/factories/lsp16-universal-factory.md @@ -1,6 +1,6 @@ --- sidebar_label: 'LSP16 - Universal Factory' -sidebar_position: 4 +sidebar_position: 1 description: LUKSO's LSP16 - Universal Factory for deploying the same smart contracts to the same address across different chains. --- diff --git a/docs/standards/generic-standards/lsp23-linked-contracts-factory.md b/docs/standards/factories/lsp23-linked-contracts-factory.md similarity index 89% rename from docs/standards/generic-standards/lsp23-linked-contracts-factory.md rename to docs/standards/factories/lsp23-linked-contracts-factory.md index 7220229480..d2e7251fe8 100644 --- a/docs/standards/generic-standards/lsp23-linked-contracts-factory.md +++ b/docs/standards/factories/lsp23-linked-contracts-factory.md @@ -1,6 +1,6 @@ --- sidebar_label: 'LSP23 - Linked Contracts Factory' -sidebar_position: 7 +sidebar_position: 2 description: LUKSO's LSP23 Linked Contracts Factory to allow the deployment of primary and secondary smart contracts that are linked together. --- @@ -42,7 +42,7 @@ You can find the [`IPostDeploymentModule`](../../contracts/contracts/LSP23Linked ## Example -The deployment process for a [`Universal Profile`](../universal-profile/introduction.md) and its associated [`Key Manager`](../universal-profile/lsp6-key-manager.md) involves a series of steps that ensure proper integration and ownership assignment between the two contracts. The `Universal Profile` serves as the primary contract, while the `Key Manager` functions as the secondary contract. Both contracts require each other's addresses during deployment. +The deployment process for a [`Universal Profile`](../accounts/introduction.md) and its associated [`Key Manager`](../access-control/lsp6-key-manager.md) involves a series of steps that ensure proper integration and ownership assignment between the two contracts. The `Universal Profile` serves as the primary contract, while the `Key Manager` functions as the secondary contract. Both contracts require each other's addresses during deployment. Using, `LSP23`, the deployment flow is outlined as follows: diff --git a/docs/standards/faq/_category_.yml b/docs/standards/faq/_category_.yml deleted file mode 100644 index 9441ed4d21..0000000000 --- a/docs/standards/faq/_category_.yml +++ /dev/null @@ -1,2 +0,0 @@ -label: '❔FAQ' -collapsed: true diff --git a/docs/standards/generic-standards/_category_.yml b/docs/standards/generic-standards/_category_.yml deleted file mode 100644 index cc183b8283..0000000000 --- a/docs/standards/generic-standards/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: 'Generic Standards' -collapsed: true -position: 5 diff --git a/docs/standards/universal-profile/img/erc725.jpg b/docs/standards/img/erc725.jpg similarity index 100% rename from docs/standards/universal-profile/img/erc725.jpg rename to docs/standards/img/erc725.jpg diff --git a/docs/standards/introduction.md b/docs/standards/introduction.md index c737023295..052cceedea 100644 --- a/docs/standards/introduction.md +++ b/docs/standards/introduction.md @@ -1,6 +1,5 @@ --- title: 'Introduction' -sidebar_position: 1 description: Introduction to LSPs (LUKSO Standars Proposals). --- @@ -30,9 +29,7 @@ The use of smart contracts and standards like the LSPs can mitigate some central :::note -The LSP standards are **not order-dependent**. They can be related to each other in a **backward or forward** order. - -Meaning a LSP standard could use another one that comes after or before in order. For example **[LSP0 - ERC725Account](../standards/universal-profile/lsp0-erc725account.md)** uses **[LSP1 - UniversalReceiver](../standards/generic-standards/lsp1-universal-receiver-delegate.md)**, **[LSP2 - ERC725YJSONSchema](../standards/generic-standards/lsp2-json-schema.md)** and could use **[LSP3 - ProfileMetadata](../standards/universal-profile/lsp3-profile-metadata.md)**, etc. +LSPs are **not order-dependent**. They can be related to each other in a **backward or forward** order. Meaning a standard could use another one that comes after or before in order. For example **[LSP0 - ERC725Account](../standards/accounts/lsp0-erc725account.md)** uses **[LSP1 - UniversalReceiver](../standards/accounts/lsp1-universal-receiver-delegate.md)**, **[LSP2 - ERC725YJSONSchema](../standards/metadata/lsp2-json-schema.md)** and could use **[LSP3 - ProfileMetadata](../standards/metadata/lsp3-profile-metadata.md)**, etc. ::: diff --git a/docs/standards/lsp-background/_category_.yml b/docs/standards/lsp-background/_category_.yml deleted file mode 100644 index 2af5c9a1d4..0000000000 --- a/docs/standards/lsp-background/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: 'LSPs Background' -collapsed: true -position: 4 diff --git a/docs/standards/universal-profile/lsp10-received-vaults.md b/docs/standards/metadata/lsp10-received-vaults.md similarity index 87% rename from docs/standards/universal-profile/lsp10-received-vaults.md rename to docs/standards/metadata/lsp10-received-vaults.md index e08d48213f..40ffa9d220 100644 --- a/docs/standards/universal-profile/lsp10-received-vaults.md +++ b/docs/standards/metadata/lsp10-received-vaults.md @@ -14,7 +14,7 @@ description: LUKSO LSP10 - Received Vaults for keeping track of all the vaults o ## Introduction -To keep track of all the vaults that an address owns, we should avoid the same problem mentioned in [LSP5-ReceivedAssets](./lsp5-received-assets.md), which is not informing recipients and senders about the ownership transfer of [LSP9-Vaults](./lsp9-vault.md). +To keep track of all the vaults that an address owns, we should avoid the same problem mentioned in [LSP5-ReceivedAssets](./lsp5-received-assets.md), which is not informing recipients and senders about the ownership transfer of [LSP9-Vaults](../accounts/lsp9-vault.md). One way to avoid this problem is to create generic metadata keys that developers should register in the smart contract storage, representing how many different vaults you own, their type, and the address of the transferred vault contract. @@ -22,11 +22,11 @@ One way to avoid this problem is to create generic metadata keys that developers :::tip Recommendation -Make sure to understand the **[ERC725Y Generic Key/Value Store](../lsp-background/erc725.md#erc725y---generic-data-keyvalue-store)** and **[LSP2 - ERC725YJSONSchema](../generic-standards/lsp2-json-schema.md)** Standards before going through the ERC725Y Data Keys. +Make sure to understand the **[ERC725Y Generic Key/Value Store](../erc725.md#erc725y---generic-data-keyvalue-store)** and **[LSP2 - ERC725YJSONSchema](../metadata/lsp2-json-schema.md)** Standards before going through the ERC725Y Data Keys. ::: -This Metadata standard describes two data keys that can be added to an [ERC725Y](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-725.md) smart contract to keep track of received and owned [LSP9-Vaults](./lsp9-vault.md). +This Metadata standard describes two data keys that can be added to an [ERC725Y](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-725.md) smart contract to keep track of received and owned [LSP9-Vaults](../accounts/lsp9-vault.md). ### `LSP10Vaults[]` @@ -55,7 +55,7 @@ This data key represents a map key holding both: - an [ERC165 interface ID](https://eips.ethereum.org/EIPS/eip-165) to quickly identify the standard used by each vault's smart contract (without the need to query the assets contracts directly). - the index in the [`LSP10Vaults[]`](#lsp10vaults-) array where the received vaults addresses are stored. -The `LSP10VaultsMap` data key also helps prevent adding duplications to the array when automatically added via smart contract (_e.g.,_ an [LSP1-UniversalReceiverDelegate](../generic-standards/lsp1-universal-receiver-delegate.md)). +The `LSP10VaultsMap` data key also helps prevent adding duplications to the array when automatically added via smart contract (_e.g.,_ an [LSP1-UniversalReceiverDelegate](../accounts/lsp1-universal-receiver-delegate.md)). ```json { diff --git a/docs/standards/universal-profile/lsp12-issued-assets.md b/docs/standards/metadata/lsp12-issued-assets.md similarity index 93% rename from docs/standards/universal-profile/lsp12-issued-assets.md rename to docs/standards/metadata/lsp12-issued-assets.md index 2d98582e16..2541900d37 100644 --- a/docs/standards/universal-profile/lsp12-issued-assets.md +++ b/docs/standards/metadata/lsp12-issued-assets.md @@ -22,7 +22,7 @@ One way to solve this problem is to create generic metadata keys that would regi :::tip Recommendation -Make sure to understand the **[ERC725Y Generic Key/Value Store](../lsp-background/erc725.md#erc725y---generic-data-keyvalue-store)** and **[LSP2 - ERC725YJSONSchema](../generic-standards/lsp2-json-schema.md)** Standards before going through the ERC725Y Data Keys. +Make sure to understand the **[ERC725Y Generic Key/Value Store](../erc725.md#erc725y---generic-data-keyvalue-store)** and **[LSP2 - ERC725YJSONSchema](../metadata/lsp2-json-schema.md)** Standards before going through the ERC725Y Data Keys. ::: diff --git a/docs/standards/generic-standards/lsp2-json-schema.md b/docs/standards/metadata/lsp2-json-schema.md similarity index 96% rename from docs/standards/generic-standards/lsp2-json-schema.md rename to docs/standards/metadata/lsp2-json-schema.md index 900c4a84c9..4b7257bf6a 100644 --- a/docs/standards/generic-standards/lsp2-json-schema.md +++ b/docs/standards/metadata/lsp2-json-schema.md @@ -36,7 +36,7 @@ The storage of a smart contract consists of multiple **storage slots**. These sl 0xdeba1e292f8ba88238e10ab3c7f88bd4be4fac56cad5194b6ecceaf653468af1 => 0x4d7920546f6b656e20322e30 ``` -Using **slot numbers** and **raw bytes** makes the contract storage very hard to handle. [ERC725Y](../universal-profile/lsp0-erc725account.md#erc725y---generic-key-value-store) solves part of the problem through a more flexible storage layout, where data is addressed via `bytes32` keys. However, with such low-level languages, it is difficult for humans to understand the data in the storage. +Using **slot numbers** and **raw bytes** makes the contract storage very hard to handle. [ERC725Y](../accounts/lsp0-erc725account.md#erc725y---generic-key-value-store) solves part of the problem through a more flexible storage layout, where data is addressed via `bytes32` keys. However, with such low-level languages, it is difficult for humans to understand the data in the storage. The main problem around smart contract storage also arises when data is stored differently, depending on individual use cases and application needs. No standard schema defines "what the data stored under a specific data key represents". @@ -214,7 +214,7 @@ You must take into consideration the fact that if you choose the same value to h A data key of type **MappingWithGrouping** is similar to the **[Mapping](#mapping)** data key type, except that sub-types can be added to the main mapping data key. -For instance, it can be used to differentiate various types from the primary mapping data key, like different types of permissions (see [LSP6 - Key Manager](../universal-profile/lsp6-key-manager.md)). +For instance, it can be used to differentiate various types from the primary mapping data key, like different types of permissions (see [LSP6 - Key Manager](../access-control/lsp6-key-manager.md)). Below is an example of a MappingWithGrouping data key: @@ -252,7 +252,7 @@ bytes32 dataKey = bytes32( :::success Recommendation -Watch our following video for an overview of how static types (`uintM`, `bytesN`, `bool`), `bytes` and `string` are encoded in the [ERC725Y](../lsp-background/erc725.md#erc725y-data-representation) storage of a smart contract using the LSP2 standard. +Watch our following video for an overview of how static types (`uintM`, `bytesN`, `bool`), `bytes` and `string` are encoded in the [ERC725Y](../erc725.md#erc725y-data-representation) storage of a smart contract using the LSP2 standard. ::: diff --git a/docs/standards/universal-profile/lsp3-profile-metadata.md b/docs/standards/metadata/lsp3-profile-metadata.md similarity index 85% rename from docs/standards/universal-profile/lsp3-profile-metadata.md rename to docs/standards/metadata/lsp3-profile-metadata.md index aa1532381b..c189bc9bc0 100644 --- a/docs/standards/universal-profile/lsp3-profile-metadata.md +++ b/docs/standards/metadata/lsp3-profile-metadata.md @@ -14,18 +14,18 @@ description: 'LUKSO LSP3-Profile-Metadata: a Metadata standard that defines spec ## Introduction -The implementation of the **[LSP0-ERC725Account](./lsp0-erc725account.md)** standard does not contain any metadata describing the account. +The implementation of the **[LSP0-ERC725Account](../accounts/lsp0-erc725account.md)** standard does not contain any metadata describing the account. **LSP3-Profile-Metadata** is a Metadata standard that defines specific data keys to describe a profile. A Universal Profile combines the following two standards. -- **[LSP0-ERC725Account](./lsp0-erc725account.md)**: an interface for a smart contract-based account. -- **LSP3-Profile-Metadata**: a set of predefined [ERC725Y](lsp0-erc725account.md#erc725y---generic-key-value-store) Data keys to describe the profile. +- **[LSP0-ERC725Account](../accounts/lsp0-erc725account.md)**: an interface for a smart contract-based account. +- **LSP3-Profile-Metadata**: a set of predefined [ERC725Y](../accounts/lsp0-erc725account.md#erc725y---generic-key-value-store) Data keys to describe the profile. ## ERC725Y Data Keys :::tip Recommendation -Make sure to understand the **[ERC725Y Generic Key/Value Store](../lsp-background/erc725.md#erc725y---generic-data-keyvalue-store)** and **[LSP2 - ERC725YJSONSchema](../generic-standards/lsp2-json-schema.md)** Standards before going through the ERC725Y Data Keys. +Make sure to understand the **[ERC725Y Generic Key/Value Store](../erc725.md#erc725y---generic-data-keyvalue-store)** and **[LSP2 - ERC725YJSONSchema](../metadata/lsp2-json-schema.md)** Standards before going through the ERC725Y Data Keys. ::: @@ -161,4 +161,4 @@ See the [LSP5 - Received Assets](./lsp5-received-assets.md) standard page for mo } ``` -If the Universal Profile is used with the **[LSP6-KeyManager](./lsp6-key-manager.md)** and **[LSP1-UniversalReceiverDelegate](../generic-standards/lsp1-universal-receiver-delegate.md)**, the received assets will be automatically registered in the storage. To know how many different assets you have, you can query this data key. +If the Universal Profile is used with the **[LSP6-KeyManager](../access-control/lsp6-key-manager.md)** and **[LSP1-UniversalReceiverDelegate](../accounts/lsp1-universal-receiver-delegate.md)**, the received assets will be automatically registered in the storage. To know how many different assets you have, you can query this data key. diff --git a/docs/standards/universal-profile/lsp5-received-assets.md b/docs/standards/metadata/lsp5-received-assets.md similarity index 91% rename from docs/standards/universal-profile/lsp5-received-assets.md rename to docs/standards/metadata/lsp5-received-assets.md index da058b5554..68b8fc2b77 100644 --- a/docs/standards/universal-profile/lsp5-received-assets.md +++ b/docs/standards/metadata/lsp5-received-assets.md @@ -34,7 +34,7 @@ One way to solve this problem is to create generic metadata keys that would regi :::tip Recommendation -Make sure to understand the **[ERC725Y Generic Key/Value Store](../lsp-background/erc725.md#erc725y---generic-data-keyvalue-store)** and **[LSP2 - ERC725YJSONSchema](../generic-standards/lsp2-json-schema.md)** Standards before going through the ERC725Y Data Keys. +Make sure to understand the **[ERC725Y Generic Key/Value Store](../erc725.md#erc725y---generic-data-keyvalue-store)** and **[LSP2 - ERC725YJSONSchema](../metadata/lsp2-json-schema.md)** Standards before going through the ERC725Y Data Keys. ::: @@ -67,7 +67,7 @@ This data key represents a map key, both holding: - an [ERC165 interface ID](https://eips.ethereum.org/EIPS/eip-165) to quickly identify the standard used by each asset smart contract (without the need to query the asset contracts directly). - the index in the [`LSP5ReceivedAssets[]`](#lsp5receivedassets-) Array where the received asset addresses are stored. -The `LSP5ReceivedAssetsMap` data key also helps to prevent adding duplications to the array when automatically added via smart contract (_e.g., _ an [LSP1-UniversalReceiverDelegate](../generic-standards/lsp1-universal-receiver-delegate.md)). +The `LSP5ReceivedAssetsMap` data key also helps to prevent adding duplications to the array when automatically added via smart contract (_e.g., _ an [LSP1-UniversalReceiverDelegate](../accounts/lsp1-universal-receiver-delegate.md)). ```json { @@ -90,7 +90,7 @@ The data keys are also set on the **sender Universal Profile** to remove the tok If set when transferring tokens, these data keys are automatically updated in the Universal Profile storage via the [LSP1UniversalReceiverDelegateUP](../../contracts/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP/LSP1UniversalReceiverDelegateUP.md) contract. :::note -Check the [token transfer scenario](../generic-standards/lsp1-universal-receiver-delegate#token-transfer-scenario) for more details. +Check the [token transfer scenario](../accounts/lsp1-universal-receiver-delegate#token-transfer-scenario) for more details. ::: ![Token transfer detailed flow](/img/standards/lsp5/detailed-token-transfer.jpeg) diff --git a/docs/standards/standard-detection.md b/docs/standards/standard-types.md similarity index 64% rename from docs/standards/standard-detection.md rename to docs/standards/standard-types.md index ae82c3b32c..c4b587fd58 100644 --- a/docs/standards/standard-detection.md +++ b/docs/standards/standard-types.md @@ -1,23 +1,16 @@ --- -title: 'Standard Detection' -sidebar_position: 3 -description: 'Standard Detection using interfaceId and the SupportedStandards:{StandardName} data key.' +title: 'Types of LSPs Standards' +description: 'Discover the different type of LUKSO Standards Proposals: smart contracts interfaces and standardised metadata keys.' --- -# Standard Detection - -:::caution - -The **`interfaceId`** and the **`SupportedStandards:{StandardName}`** data key is not the most secure way to check for a standard, as they could be set manually. - -::: +# Types of LSPs Standards There are two types of **LSP** standards used to interact with smart contracts on the LUKSO blockchain. -| Standard Type | Description | Examples | -| :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Interface Standards** | **Standardize a set of functions**.
Defines the functions that can be called on a smart contract and their expected parameters | [LSP0-ERC725Account](./universal-profile/lsp0-erc725account.md)
[LSP6-KeyManager](./universal-profile/lsp6-key-manager.md)
[LSP7-DigitalAsset](./tokens/LSP7-Digital-Asset.md) | -| **Metadata Standards** | **Standardize a set of ERC725Y data keys**.
Informs about the data set by default on the contract and which data keys to query to retrieve such data | [LSP3-Profile-Metadata](./universal-profile/lsp3-profile-metadata.md)
[LSP4-DigitalAsset-Metadata](./tokens/LSP4-Digital-Asset-Metadata.md)
[LSP10ReceivedVaults](./universal-profile/lsp10-received-vaults.md) | +| Standard Type | Description | Examples | +| :---------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Interface Standards** | **Standardize a set of functions**.
Defines the functions that can be called on a smart contract and their expected parameters | [LSP0-ERC725Account](./accounts/lsp0-erc725account.md)
[LSP6-KeyManager](./access-control/lsp6-key-manager.md)
[LSP7-DigitalAsset](./tokens/LSP7-Digital-Asset.md) | +| **Metadata Standards** | **Standardize a set of ERC725Y data keys**.
Informs about the data set by default on the contract and which data keys to query to retrieve such data | [LSP3-Profile-Metadata](./metadata/lsp3-profile-metadata.md)
[LSP4-DigitalAsset-Metadata](./tokens/LSP4-Digital-Asset-Metadata.md)
[LSP10ReceivedVaults](./metadata/lsp10-received-vaults.md) | ![Interface and metadata standards](/img/standards/standard-detection/standard-detection.jpeg) diff --git a/docs/standards/tokens/LSP4-Digital-Asset-Metadata.md b/docs/standards/tokens/LSP4-Digital-Asset-Metadata.md index bf3928b078..eed696a810 100644 --- a/docs/standards/tokens/LSP4-Digital-Asset-Metadata.md +++ b/docs/standards/tokens/LSP4-Digital-Asset-Metadata.md @@ -98,7 +98,7 @@ By mixing contract standards (LSP7/8), token types (Token, NFT, Collection) and :::tip Recommendation -Make sure to understand the **[ERC725Y Generic Key/Value Store](../lsp-background/erc725.md#erc725y---generic-data-keyvalue-store)** and **[LSP2 - ERC725YJSONSchema](../generic-standards/lsp2-json-schema.md)** Standards before going through the ERC725Y Data Keys. +Make sure to understand the **[ERC725Y Generic Key/Value Store](../erc725.md#erc725y---generic-data-keyvalue-store)** and **[LSP2 - ERC725YJSONSchema](../metadata/lsp2-json-schema.md)** Standards before going through the ERC725Y Data Keys. ::: @@ -190,7 +190,7 @@ The value attached to this data key is a [`VerifiableURI`](https://github.com/lu ### `LSP4Creators` -This data key refers to the **address(es)** of the **creator(s)** of the digital asset. It can help to check the **asset authenticity** when combined with **[LSP12-IssuedAssets](../universal-profile/lsp12-issued-assets.md)**. +This data key refers to the **address(es)** of the **creator(s)** of the digital asset. It can help to check the **asset authenticity** when combined with **[LSP12-IssuedAssets](../metadata/lsp12-issued-assets.md)**. ```json { diff --git a/docs/standards/tokens/LSP7-Digital-Asset.md b/docs/standards/tokens/LSP7-Digital-Asset.md index d24bb39144..8a3a7dafb1 100644 --- a/docs/standards/tokens/LSP7-Digital-Asset.md +++ b/docs/standards/tokens/LSP7-Digital-Asset.md @@ -49,7 +49,7 @@ When creating assets compliant with **LSP7-DigitalAsset** standard, it is possib :::tip Recommendation -To mark the **asset authenticity**, it's advised to use a combination between **[LSP4-DigitalAssetMetadata](./LSP4-Digital-Asset-Metadata.md)** and **[LSP12-IssuedAssets](../universal-profile/lsp12-issued-assets.md)**. +To mark the **asset authenticity**, it's advised to use a combination between **[LSP4-DigitalAssetMetadata](./LSP4-Digital-Asset-Metadata.md)** and **[LSP12-IssuedAssets](../metadata/lsp12-issued-assets.md)**. ::: @@ -75,11 +75,11 @@ During an **ERC20 token transfer**, the sender's balance is decreased, and the r ![ERC20 Transfer](/img/standards/lsp7/erc20-transfer.jpeg) -During an **LSP7 token transfer**, as well as updating the balances, both the sender and recipient are informed of the transfer by calling their **[`universalReceiver(...)`](../generic-standards/lsp1-universal-receiver.md#lsp1---universal-receiver)** function (if these are both smart contracts). +During an **LSP7 token transfer**, as well as updating the balances, both the sender and recipient are informed of the transfer by calling their **[`universalReceiver(...)`](../accounts/lsp1-universal-receiver.md#lsp1---universal-receiver)** function (if these are both smart contracts). ![LSP7DigitalAsset Transfer](/img/standards/lsp7/lsp7-transfer.jpeg) -In this way, users are **informed** about the token transfers and approval and can decide how to **react on the transfer or approval**, either by accepting or rejecting the tokens, or implementing a custom logic to run on each transfer with the help of **[LSP1-UniversalReceiverDelegate](../generic-standards/lsp1-universal-receiver-delegate.md)**. +In this way, users are **informed** about the token transfers and approval and can decide how to **react on the transfer or approval**, either by accepting or rejecting the tokens, or implementing a custom logic to run on each transfer with the help of **[LSP1-UniversalReceiverDelegate](../accounts/lsp1-universal-receiver-delegate.md)**. If the sender and recipient are smart contracts that implement the LSP1 standard, the LSP7 token contract will notify them using the following `bytes32 typeIds` when calling their `universalReceiver(...)` function. @@ -99,19 +99,19 @@ For instance, if the wrong address was pasted by mistake by the user in the inpu ::: -It is expected in the LUKSO's ecosystem to use **[smart contract-based accounts](../universal-profile/lsp0-erc725account.md)** to interact on the blockchain. This includes sending and receiving tokens. EOAs can receive tokens, but should be used mainly to control these accounts, not to interact on the network or hold tokens. +It is expected in the LUKSO's ecosystem to use **[smart contract-based accounts](../accounts/lsp0-erc725account.md)** to interact on the blockchain. This includes sending and receiving tokens. EOAs can receive tokens, but should be used mainly to control these accounts, not to interact on the network or hold tokens. To ensure a **safe asset transfer**, an additional boolean parameter was added to the [`transfer(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#transfer) and [`_mint(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#_mint) functions: -- If set to `false`, the transfer will only pass if the recipient is a smart contract that implements the **[LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md)** standard. +- If set to `false`, the transfer will only pass if the recipient is a smart contract that implements the **[LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md)** standard. ![Token Force Boolean False](/img/standards/lsp7/tokens-force-false.jpeg) -- If set to `true`, the transfer will not be dependent on the recipient, meaning **smart contracts** not implementing the **[LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md)** standard and **EOAs** will be able to receive the tokens. +- If set to `true`, the transfer will not be dependent on the recipient, meaning **smart contracts** not implementing the **[LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md)** standard and **EOAs** will be able to receive the tokens. ![Token Force Boolean True](/img/standards/lsp7/tokens-force-true.jpeg) -Implementing the **[LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md)** standard will give a sign that the contract knows how to handle the tokens received. +Implementing the **[LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md)** standard will give a sign that the contract knows how to handle the tokens received. ## References diff --git a/docs/standards/tokens/LSP8-Identifiable-Digital-Asset.md b/docs/standards/tokens/LSP8-Identifiable-Digital-Asset.md index 3f33f15220..b9b61af08c 100644 --- a/docs/standards/tokens/LSP8-Identifiable-Digital-Asset.md +++ b/docs/standards/tokens/LSP8-Identifiable-Digital-Asset.md @@ -87,7 +87,7 @@ The **bytes32 tokenId** can be interpreted as a: ![LSP8 Address TokenIds Representation](/img/standards/lsp8/lsp8-tokenId-address.jpeg) -TokenIds represented as **smart contract address** allow the creation of more **complex NFTs**. When each tokenId is a contract that have its own **[ERC725Y](../lsp-background//erc725.md#erc725y---generic-data-keyvalue-store)** storage. For instance in a video game, by changing the features and metadata of the tokenId based on the **game rules**. +TokenIds represented as **smart contract address** allow the creation of more **complex NFTs**. When each tokenId is a contract that have its own **[ERC725Y](../erc725.md#erc725y---generic-data-keyvalue-store)** storage. For instance in a video game, by changing the features and metadata of the tokenId based on the **game rules**. ![LSP8 Game Nested NFTs TokenIds Representation](/img/standards/lsp8/lsp8-game.jpeg) @@ -95,7 +95,7 @@ TokenIds represented as **smart contract address** allow the creation of more ** :::tip Recommendation -To mark the **asset authenticity**, it's advised to use a combination between **[LSP4-DigitalAssetMetadata](./LSP4-Digital-Asset-Metadata.md)** and **[LSP12-IssuedAssets](../universal-profile/lsp12-issued-assets.md)**. +To mark the **asset authenticity**, it's advised to use a combination between **[LSP4-DigitalAssetMetadata](./LSP4-Digital-Asset-Metadata.md)** and **[LSP12-IssuedAssets](../metadata/lsp12-issued-assets.md)**. ::: @@ -127,11 +127,11 @@ During an **ERC721 token transfer**, the ownership of the tokenId is changed fro ![ERC721 Transfer](/img/standards/lsp8/erc721-transfer.jpeg) -During an **LSP8 token transfer**, as well as updating the tokenId ownership, both the sender and recipient are informed of the transfer by calling the **[`universalReceiever(...)`](../generic-standards/lsp1-universal-receiver.md#lsp1---universal-receiver)** function on their profiles. +During an **LSP8 token transfer**, as well as updating the tokenId ownership, both the sender and recipient are informed of the transfer by calling the **[`universalReceiever(...)`](../accounts/lsp1-universal-receiver.md#lsp1---universal-receiver)** function on their profiles. ![LSP8 Transfer](/img/standards/lsp8/lsp8-transfer.jpeg) -In this way, users are **informed** about the NFT transfer and can decide how to **react on the transfer**, either by accepting or rejecting the NFT, or implementing a custom logic to run on each transfer with the help of **[LSP1-UniversalReceiverDelegate](../generic-standards/lsp1-universal-receiver-delegate.md)**. +In this way, users are **informed** about the NFT transfer and can decide how to **react on the transfer**, either by accepting or rejecting the NFT, or implementing a custom logic to run on each transfer with the help of **[LSP1-UniversalReceiverDelegate](../accounts/lsp1-universal-receiver-delegate.md)**. If the sender and recipient are smart contracts that implement the LSP1 standard, the LSP8 token contract will notify them using the following `bytes32 typeIds` when calling their `universalReceiver(...)` function. @@ -153,15 +153,15 @@ It is expected in the LUKSO's ecosystem to use **smart contract based accounts** To ensure a **safe asset transfer**, an additional boolean parameter was added to the [`transfer(...)`](../../contracts/contracts/LSP8IdentifiableDigitalAsset/LSP8IdentifiableDigitalAsset.md#transfer) and [`_mint(...)`](../../contracts/contracts/LSP7DigitalAsset/LSP7DigitalAsset.md#_mint) functions: -- If set to `false`, the transfer will only pass if the recipient is a smart contract that implements the **[LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md)** standard. +- If set to `false`, the transfer will only pass if the recipient is a smart contract that implements the **[LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md)** standard. ![Token Force Boolean False](/img/standards/lsp7/tokens-force-false.jpeg) -- If set to `true`, the transfer will not be dependent on the recipient, meaning **smart contracts** not implementing the **[LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md)** standard and **EOAs** will be able to receive the tokens. +- If set to `true`, the transfer will not be dependent on the recipient, meaning **smart contracts** not implementing the **[LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md)** standard and **EOAs** will be able to receive the tokens. ![Token Force Boolean True](/img/standards/lsp7/tokens-force-true.jpeg) -Implementing the **[LSP1-UniversalReceiver](../generic-standards/lsp1-universal-receiver.md)** standard will give a sign that the contract knows how to handle the tokens received. +Implementing the **[LSP1-UniversalReceiver](../accounts/lsp1-universal-receiver.md)** standard will give a sign that the contract knows how to handle the tokens received. ## LSP8 Collection vs TokenId Metadata diff --git a/docs/standards/tokens/_category_.yml b/docs/standards/tokens/_category_.yml deleted file mode 100644 index dd1c8e3800..0000000000 --- a/docs/standards/tokens/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: 'Tokens & NFTs' -collapsed: true -position: 7 diff --git a/docs/standards/universal-profile/_category_.yml b/docs/standards/universal-profile/_category_.yml deleted file mode 100644 index 640e4312fb..0000000000 --- a/docs/standards/universal-profile/_category_.yml +++ /dev/null @@ -1,3 +0,0 @@ -label: 'Universal Profiles' -collapsed: true -position: 6 diff --git a/docs/tools/erc725js/methods.md b/docs/tools/erc725js/methods.md index 7db0ba5e78..c0e392aab8 100644 --- a/docs/tools/erc725js/methods.md +++ b/docs/tools/erc725js/methods.md @@ -1941,8 +1941,8 @@ await myErc725.isValidSignature( // false ``` -[lsp6 keymanager permissions]: ../../../../../standards/universal-profile/lsp6-key-manager#permissions -[lsp6 keymanager standard]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[lsp6 keymanager permissions]: /standards/access-control/lsp6-key-manager#permissions +[lsp6 keymanager standard]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [lsp-2 erc725yjsonschema]: https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-2-ERC725YJSONSchema.md ### supportsInterface @@ -1972,13 +1972,13 @@ Either a string of the hexadecimal `interfaceID` as defined by [ERC165](https:// | `ERC1271` | [EIP-1271: Standard Signature Validation Method for Contracts](https://eips.ethereum.org/EIPS/eip-1271) | | `ERC725X` | [EIP-725: General execution standard](https://eips.ethereum.org/EIPS/eip-725) | | `ERC725Y` | [EIP-725: General key-value store](https://eips.ethereum.org/EIPS/eip-725) | -| `LSP0ERC725Account` | [LSP-0: ERC725 Account](https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account) | -| `LSP1UniversalReceiver` | [LSP-1: Universal Receiver](https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver) | +| `LSP0ERC725Account` | [LSP-0: ERC725 Account](https://docs.lukso.tech/standards/accounts/lsp0-erc725account) | +| `LSP1UniversalReceiver` | [LSP-1: Universal Receiver](https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver) | | `LSP1UniversalReceiverDelegate` | [LSP-1: Universal Receiver Delegate](https://docs.lukso.tech/standards/universal-profile/lsp1-universal-receiver-delegate) | -| `LSP6KeyManager` | [LSP-6: Key Manager](https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager) | +| `LSP6KeyManager` | [LSP-6: Key Manager](https://docs.lukso.tech/standards/access-control/lsp6-key-manager) | | `LSP7DigitalAsset` | [LSP-7: Digital Asset](https://docs.lukso.tech/standards/nft-2.0/LSP7-Digital-Asset) | | `LSP8IdentifiableDigitalAsset` | [LSP-8: Identifiable Digital Asset](https://docs.lukso.tech/standards/nft-2.0/LSP8-Identifiable-Digital-Asset) | -| `LSP9Vault` | [LSP-9: Vault](https://docs.lukso.tech/standards/universal-profile/lsp9-vault) | +| `LSP9Vault` | [LSP-9: Vault](https://docs.lukso.tech/standards/accounts/lsp9-vault) | :::info @@ -2556,7 +2556,7 @@ myErc725.checkPermissions(requiredPermissions, grantedPermissions); ERC725.checkPermissions(requiredPermissions, grantedPermissions); ``` -Check if the required permissions are included in the granted permissions as defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager). +Check if the required permissions are included in the granted permissions as defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/access-control/lsp6-key-manager). :::info @@ -2630,7 +2630,7 @@ myErc725.checkPermissions(requiredPermissions, grantedPermissions); ERC725.encodePermissions(permissions); ``` -Encodes permissions into a hexadecimal string as defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager). +Encodes permissions into a hexadecimal string as defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/access-control/lsp6-key-manager). :::info @@ -2711,7 +2711,7 @@ myErc725.encodePermissions({ ERC725.decodePermissions(permission); ``` -Decodes permissions from hexadecimal defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager). +Decodes permissions from hexadecimal defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/access-control/lsp6-key-manager). :::info diff --git a/docs/tools/erc725js/schemas.md b/docs/tools/erc725js/schemas.md index 143f2f98d4..86fc89e6dd 100644 --- a/docs/tools/erc725js/schemas.md +++ b/docs/tools/erc725js/schemas.md @@ -10,7 +10,7 @@ For more details on schemas, see the [**official specification** of the LSP2 ERC ::: -The ⚒️ [erc725.js](https://npmjs.com/package/@erc725/erc725.js) library works with [ERC725Y JSON schemas](../../standards/generic-standards/lsp2-json-schema). These schemas are JSON structures that tell developers and programs how to decode and encode 🗂️ [ERC725Y data keys](../../standards/lsp-background/erc725#erc725y-generic-data-keyvalue-store) from any [ERC725Y](https://eips.ethereum.org/EIPS/eip-725) smart contract.. You need to load the required schemas of the data keys you want to fetch when initializing the `ERC725` class. +The ⚒️ [erc725.js](https://npmjs.com/package/@erc725/erc725.js) library works with [ERC725Y JSON schemas](../../standards/metadata/lsp2-json-schema). These schemas are JSON structures that tell developers and programs how to decode and encode 🗂️ [ERC725Y data keys](../../standards/erc725#erc725y-generic-data-keyvalue-store) from any [ERC725Y](https://eips.ethereum.org/EIPS/eip-725) smart contract.. You need to load the required schemas of the data keys you want to fetch when initializing the `ERC725` class. The most common and standard schemas are [available](../../tools/erc725js/schemas.md) directly within the _erc725.js_ library. But you can also create and load your own ERC725Y JSON schemas if you want to use custom data keys. diff --git a/docs/tools/libraries/erc725js/methods.md b/docs/tools/libraries/erc725js/methods.md index 7db0ba5e78..7c7ccf157e 100644 --- a/docs/tools/libraries/erc725js/methods.md +++ b/docs/tools/libraries/erc725js/methods.md @@ -1941,8 +1941,8 @@ await myErc725.isValidSignature( // false ``` -[lsp6 keymanager permissions]: ../../../../../standards/universal-profile/lsp6-key-manager#permissions -[lsp6 keymanager standard]: https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager +[lsp6 keymanager permissions]: ../../../../../standards/access-control/lsp6-key-manager#permissions +[lsp6 keymanager standard]: https://docs.lukso.tech/standards/access-control/lsp6-key-manager [lsp-2 erc725yjsonschema]: https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-2-ERC725YJSONSchema.md ### supportsInterface @@ -1972,13 +1972,13 @@ Either a string of the hexadecimal `interfaceID` as defined by [ERC165](https:// | `ERC1271` | [EIP-1271: Standard Signature Validation Method for Contracts](https://eips.ethereum.org/EIPS/eip-1271) | | `ERC725X` | [EIP-725: General execution standard](https://eips.ethereum.org/EIPS/eip-725) | | `ERC725Y` | [EIP-725: General key-value store](https://eips.ethereum.org/EIPS/eip-725) | -| `LSP0ERC725Account` | [LSP-0: ERC725 Account](https://docs.lukso.tech/standards/universal-profile/lsp0-erc725account) | -| `LSP1UniversalReceiver` | [LSP-1: Universal Receiver](https://docs.lukso.tech/standards/generic-standards/lsp1-universal-receiver) | +| `LSP0ERC725Account` | [LSP-0: ERC725 Account](https://docs.lukso.tech/standards/accounts/lsp0-erc725account) | +| `LSP1UniversalReceiver` | [LSP-1: Universal Receiver](https://docs.lukso.tech/standards/accounts/lsp1-universal-receiver) | | `LSP1UniversalReceiverDelegate` | [LSP-1: Universal Receiver Delegate](https://docs.lukso.tech/standards/universal-profile/lsp1-universal-receiver-delegate) | -| `LSP6KeyManager` | [LSP-6: Key Manager](https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager) | +| `LSP6KeyManager` | [LSP-6: Key Manager](https://docs.lukso.tech/standards/access-control/lsp6-key-manager) | | `LSP7DigitalAsset` | [LSP-7: Digital Asset](https://docs.lukso.tech/standards/nft-2.0/LSP7-Digital-Asset) | | `LSP8IdentifiableDigitalAsset` | [LSP-8: Identifiable Digital Asset](https://docs.lukso.tech/standards/nft-2.0/LSP8-Identifiable-Digital-Asset) | -| `LSP9Vault` | [LSP-9: Vault](https://docs.lukso.tech/standards/universal-profile/lsp9-vault) | +| `LSP9Vault` | [LSP-9: Vault](https://docs.lukso.tech/standards/accounts/lsp9-vault) | :::info @@ -2556,7 +2556,7 @@ myErc725.checkPermissions(requiredPermissions, grantedPermissions); ERC725.checkPermissions(requiredPermissions, grantedPermissions); ``` -Check if the required permissions are included in the granted permissions as defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager). +Check if the required permissions are included in the granted permissions as defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/access-control/lsp6-key-manager). :::info @@ -2630,7 +2630,7 @@ myErc725.checkPermissions(requiredPermissions, grantedPermissions); ERC725.encodePermissions(permissions); ``` -Encodes permissions into a hexadecimal string as defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager). +Encodes permissions into a hexadecimal string as defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/access-control/lsp6-key-manager). :::info @@ -2711,7 +2711,7 @@ myErc725.encodePermissions({ ERC725.decodePermissions(permission); ``` -Decodes permissions from hexadecimal defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/universal-profile/lsp6-key-manager). +Decodes permissions from hexadecimal defined by the [LSP6 KeyManager Standard](https://docs.lukso.tech/standards/access-control/lsp6-key-manager). :::info diff --git a/docs/tools/libraries/erc725js/schemas.md b/docs/tools/libraries/erc725js/schemas.md index d24279e3ba..0648d1c99a 100644 --- a/docs/tools/libraries/erc725js/schemas.md +++ b/docs/tools/libraries/erc725js/schemas.md @@ -10,7 +10,7 @@ For more details on schemas, see the [**official specification** of the LSP2 ERC ::: -The ⚒️ [erc725.js](https://npmjs.com/package/@erc725/erc725.js) library works with [ERC725Y JSON schemas](../../../standards/generic-standards/lsp2-json-schema). These schemas are JSON structures that tell developers and programs how to decode and encode 🗂️ [ERC725Y data keys](../../../standards/lsp-background/erc725#erc725y-generic-data-keyvalue-store) from any [ERC725Y](https://eips.ethereum.org/EIPS/eip-725) smart contract.. You need to load the required schemas of the data keys you want to fetch when initializing the `ERC725` class. +The ⚒️ [erc725.js](https://npmjs.com/package/@erc725/erc725.js) library works with [ERC725Y JSON schemas](../../../standards/metadata/lsp2-json-schema). These schemas are JSON structures that tell developers and programs how to decode and encode 🗂️ [ERC725Y data keys](../../../standards/erc725#erc725y-generic-data-keyvalue-store) from any [ERC725Y](https://eips.ethereum.org/EIPS/eip-725) smart contract.. You need to load the required schemas of the data keys you want to fetch when initializing the `ERC725` class. The most common and standard schemas are available directly within the _erc725.js_ library. But you can also create and load your own ERC725Y JSON schemas if you want to use custom data keys. diff --git a/docs/standards/rpc-api.md b/docs/tools/rpc-api.md similarity index 99% rename from docs/standards/rpc-api.md rename to docs/tools/rpc-api.md index 0c6a8cdc38..ac9afad4e9 100644 --- a/docs/standards/rpc-api.md +++ b/docs/tools/rpc-api.md @@ -1,6 +1,5 @@ --- title: 🆙 RPC API -sidebar_position: 10 description: LUKSO's RPC API supported methods. --- @@ -122,7 +121,7 @@ Add a custom relayer. ##### 1. `relayer` - Object -Object containing the new relayer properties. To find more information about custom relayers, you can read the [Transaction Relay Service API](./relayer-api.md). +Object containing the new relayer properties. To find more information about custom relayers, you can read the [Transaction Relay Service API](../standards/accounts/lsp15-transaction-relayer-api.md). | Name | Type | Description | | :--------- | :----- | :---------------------------- | diff --git a/docs/tools/services/indexer.md b/docs/tools/services/indexer.md index 8b28c13520..49adf94559 100644 --- a/docs/tools/services/indexer.md +++ b/docs/tools/services/indexer.md @@ -53,7 +53,7 @@ https://api.universalprofile.cloud/ ### `GET /v1/:chainId/address/:address` -Return [LSP4 - Digital Asset Metadata](https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata/) or [LSP3 - Profile Metadata](https://docs.lukso.tech/standards/universal-profile/lsp3-profile-metadata). Loads data directly from Algolia and caches it for a while. Adding /TOKENID at the end will retrieve tokenId data for LSP8 tokens. +Return [LSP4 - Digital Asset Metadata](https://docs.lukso.tech/standards/tokens/LSP4-Digital-Asset-Metadata/) or [LSP3 - Profile Metadata](https://docs.lukso.tech/standards/metadata/lsp3-profile-metadata). Loads data directly from Algolia and caches it for a while. Adding /TOKENID at the end will retrieve tokenId data for LSP8 tokens. ### `GET /v1/:chainId/stats` diff --git a/docs/tools/services/relayer-developer.md b/docs/tools/services/relayer-developer.md index 0bc559437f..d5d86cc6bb 100644 --- a/docs/tools/services/relayer-developer.md +++ b/docs/tools/services/relayer-developer.md @@ -31,7 +31,7 @@ You can deploy Universal Profiles for users by providing either: - OPTION 1: a list of controller addresses (`lsp6ControllerAddress`) and metadata (`lsp3Profile`) - OPTION 2: a `salt` and [`postDeploymentCallData`](../../learn/universal-profile/advanced-guides/deploy-up-with-lsp23#create-the-universal-profile-initialization-calldata) -In this process, you might need to use the [`up_import`](../../standards/rpc-api#up_import) RPC call from the [Universal Profile Extension](/install-up-browser-extension) in order to add the deployed UP to the browser extension. +In this process, you might need to use the [`up_import`](../rpc-api.md#up_import) RPC call from the [Universal Profile Extension](/install-up-browser-extension) in order to add the deployed UP to the browser extension.
OPTION 1: lsp6ControllerAddress & lsp3Profile diff --git a/docusaurus.config.js b/docusaurus.config.js index 6f3bcb9180..327d0a2519 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -30,7 +30,7 @@ export default { '@docusaurus/plugin-client-redirects', { redirects: [ - //Learn home + // Learn home { from: '/learn/what-is-lukso', to: '/learn/getting-started', @@ -295,11 +295,95 @@ export default { from: '/learn/expert-guides/deploy-up-with-lsp23', to: '/learn/universal-profile/advanced-guides/deploy-up-with-lsp23', }, - //Standards + // Standards + { + from: '/standards/standard-detection', + to: '/standards/standard-types', + }, + { + from: '/standards/erc725', + to: '/standards/erc725', + }, + { + from: '/standards/metadata/lsp2-json-schema', + to: '/standards/metadata/lsp2-json-schema', + }, + { + from: '/standards/generic-standards/lsp3-profile-metadata', + to: '/standards/metadata/lsp3-profile-metadata', + }, + { + from: '/standards/generic-standards/lsp5-received-assets', + to: '/standards/metadata/lsp5-received-assets', + }, + { + from: '/standards/generic-standards/lsp10-received-vaults', + to: '/standards/metadata/lsp10-received-vaults', + }, + { + from: '/standards/generic-standards/lsp12-issued-assets', + to: '/standards/metadata/lsp12-issued-assets', + }, { from: '/standards/nft-2.0/introduction', to: '/standards/tokens/introduction', }, + { + from: '/standards/access-control/lsp6-key-manager', + to: '/standards/access-control/lsp6-key-manager', + }, + { + from: '/standards/access-control/lsp14-ownable-2-step', + to: '/standards/access-control/lsp14-ownable-2-step', + }, + { + from: '/standards/accounts/introduction', + to: '/standards/accounts/introduction', + }, + { + from: '/standards/accounts/lsp0-erc725account', + to: '/standards/accounts/lsp0-erc725account', + }, + { + from: '/standards/accounts/lsp1-universal-receiver', + to: '/standards/accounts/lsp1-universal-receiver', + }, + { + from: '/standards/accounts/lsp1-universal-receiver-delegate', + to: '/standards/accounts/lsp1-universal-receiver-delegate', + }, + { + from: '/standards/accounts/lsp9-vault', + to: '/standards/accounts/lsp9-vault', + }, + { + from: '/standards/accounts/lsp17-contract-extension', + to: '/standards/accounts/lsp17-contract-extension', + }, + { + from: '/standards/accounts/lsp20-call-verification', + to: '/standards/accounts/lsp20-call-verification', + }, + { + from: '/standards/faq/channel-nonce', + to: '/standards/accounts/lsp25-execute-relay-call', + }, + { + from: '/standards/generic-standards/lsp26-follower-system', + to: '/standards/accounts/lsp26-follower-system', + }, + { + from: '/standards/accounts/lsp15-transaction-relayer-api', + to: '/standards/accounts/lsp15-transaction-relayer-api', + }, + { + from: '/standards/factories/lsp16-universal-factory', + to: '/standards/factories/lsp16-universal-factory', + }, + { + from: '/standards/factories/lsp16-universal-factory', + to: '/standards/factories/lsp23-linked-contracts-factory', + }, ], }, ], diff --git a/sidebars.js b/sidebars.js index 6c82f374cf..dceefa9260 100644 --- a/sidebars.js +++ b/sidebars.js @@ -11,11 +11,40 @@ module.exports = { networksSidebar: [{ type: 'autogenerated', dirName: 'networks' }], - standardsSidebar: [{ type: 'autogenerated', dirName: 'standards' }], + standardsSidebar: [ + 'standards/introduction', + 'standards/erc725', + 'standards/standard-types', + { type: 'html', value: '
', defaultStyle: false }, // ----- + { + type: 'category', + label: '🗄️ Metadata', + items: [{ type: 'autogenerated', dirName: 'standards/metadata' }], + }, + { + type: 'category', + label: '🔐 Ownership & Access Control', + items: [{ type: 'autogenerated', dirName: 'standards/access-control' }], + }, + { + type: 'category', + label: '🆙 Accounts & Interactions', + items: [{ type: 'autogenerated', dirName: 'standards/accounts' }], + }, + { + type: 'category', + label: '🪙 Tokens & 🖼️ NFTs', + items: [{ type: 'autogenerated', dirName: 'standards/tokens' }], + }, + { + type: 'category', + label: '🏭 Factories', + items: [{ type: 'autogenerated', dirName: 'standards/factories' }], + }, + ], learnSidebar: [ 'learn/getting-started', 'learn/introduction', - // 'learn/migrate/migrate-to-lukso', { type: 'category', label: '🔀 Migrate to LUKSO', diff --git a/src/components/ContractCardsGallery/index.tsx b/src/components/ContractCardsGallery/index.tsx index d76e82b184..3eac101b40 100644 --- a/src/components/ContractCardsGallery/index.tsx +++ b/src/components/ContractCardsGallery/index.tsx @@ -16,13 +16,7 @@ const Contracts_AccountsInteraction = [ description: 'Allows to react on transfers and informations received (token transfers, notifications, etc...)', }, - { - name: '🌐 LSP3 Profile Metadata', - url: '/contracts/overview/UniversalProfile', - urlABI: '', - description: - 'Add information to an account or a vault, such as a profile/cover image, external links, attributes, etc...', - }, + { name: '🏦 LSP9 Vault', url: '', @@ -51,6 +45,14 @@ const Contracts_AccountsInteraction = [ description: 'Add Meta Transactions on your contract to enable gas-less transactions and more easily onboard new users.', }, + // TODO: add the contract ABI for the follower system + // { + // name: '🔍 LSP26 Follower System', + // url: '#', + // urlABI: '#', + // description: + // '...', + // }, ]; const Contracts_DigitalAssets = [ @@ -101,6 +103,16 @@ const Contracts_OwnershipAccessControl = [ }, ]; +const Contracts_Metadata = [ + { + name: '🌐 LSP3 Profile Metadata', + url: '/contracts/overview/UniversalProfile', + urlABI: '', + description: + 'Add information to an account or a vault, such as a profile/cover image, external links, attributes, etc...', + }, +]; + export const ContractCardsGallery = () => { return ( <> diff --git a/src/components/StandardsGallery/StandardsGallery.module.scss b/src/components/StandardsGallery/StandardsGallery.module.scss index e22ba5d692..66da46e437 100644 --- a/src/components/StandardsGallery/StandardsGallery.module.scss +++ b/src/components/StandardsGallery/StandardsGallery.module.scss @@ -18,7 +18,3 @@ .legoCard:hover { box-shadow: 0 1px 1px rgba(0, 0, 0, 0.8); } - -.standardName { - min-height: 40px; -} diff --git a/src/components/StandardsGallery/index.tsx b/src/components/StandardsGallery/index.tsx index d91d1ad40e..1f3c3a1269 100644 --- a/src/components/StandardsGallery/index.tsx +++ b/src/components/StandardsGallery/index.tsx @@ -6,128 +6,134 @@ const STANDARDS = [ { title: '👤 LSP0', name: 'ERC725 Account', - link: '/standards/universal-profile/lsp0-erc725account', - + link: '/standards/accounts/lsp0-erc725account', text: 'Blockchain account for asset ownership and use by individuals or entities.', }, { title: '📢 LSP1', name: 'Universal Receiver', - link: '/standards/generic-standards/lsp1-universal-receiver', - + link: '/standards/accounts/lsp1-universal-receiver', text: 'Notification receiver for incoming and outgoing transactions or information.', }, { title: '🗄️ LSP2', name: 'ERC725Y JSON Schema', - link: '/standards/generic-standards/lsp2-json-schema', - + link: '/standards/metadata/lsp2-json-schema', text: 'Describes ERC725Y data key-value pairs interpretation including encoding and decoding.', }, { title: '🌐 LSP3', name: 'Profile Metadata', - link: '/standards/universal-profile/lsp3-profile-metadata', - + link: '/standards/metadata/lsp3-profile-metadata', text: 'Set of ERC725Y data keys describing a smart contract based blockchain profile.', }, { title: '🔍 LSP4', name: 'Digital Asset Metadata', link: '/standards/tokens/LSP4-Digital-Asset-Metadata', - text: 'Describes metadata of digital assets via a set of ERC725Y data keys.', }, { title: '📒 LSP5', name: 'Received Assets', - link: '/standards/universal-profile/lsp5-received-assets', - + link: '/standards/metadata/lsp5-received-assets', text: 'Defines ERC725Y data keys storing addresses of received assets.', }, { title: '🔐 LSP6', name: 'Key Manager', - link: '/standards/universal-profile/lsp6-key-manager', - + link: '/standards/access-control/lsp6-key-manager', text: 'Contract with permissions controlled through multiple addresses.', }, { title: '🪙 LSP7', name: 'Digital Asset', link: '/standards/tokens/LSP7-Digital-Asset', - text: 'Standard for fungible or non-fungible digital assets with a unified interface.', }, { title: '🎨 LSP8', name: 'Identifiable Digital Asset', link: '/standards/tokens/LSP8-Identifiable-Digital-Asset', - text: 'Interface for uniquely identifiable digital assets with specific metadata.', }, { title: '🏦 LSP9', name: 'Vault', - link: '/standards/universal-profile/lsp9-vault', - + link: '/standards/accounts/lsp9-vault', text: 'ERC725 smart contract variant representing a blockchain vault.', }, { title: '📘 LSP10', name: 'Received Vaults', - link: '/standards/universal-profile/lsp10-received-vaults', - + link: '/standards/metadata/lsp10-received-vaults', text: 'ERC725Y keys to list owned LSP9 Vaults.', }, + { + title: '🌱 LSP11', + name: 'Basic Social Recovery', + link: 'https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-11-BasicSocialRecovery.md', + text: 'Contract that enables to recover access to any ERC725-based smart contract', + }, { title: '📗 LSP12', name: 'Issued Assets', - link: '/standards/universal-profile/lsp12-issued-assets', - + link: '/standards/metadata/lsp12-issued-assets', text: 'List of issued assets by an individual or entity via ERC725Y keys.', }, { title: '2️⃣ LSP14', name: 'Ownable 2 Steps', - link: '/standards/generic-standards/lsp14-ownable-2-step', - + link: '/standards/access-control/lsp14-ownable-2-step', text: 'Module for secure two-step ownership management of smart contracts.', }, + { + title: '📬 LSP15', + name: 'Transaction Relayer API', + link: '/standards/accounts/lsp15-transaction-relayer-api', + text: 'A standard set of API methods to create a service that acts as a relayer and dispatch transactions on behalf of users.', + }, { title: '🏭 LSP16', name: 'Universal Factory', - link: '/standards/generic-standards/lsp16-universal-factory', - + link: '/standards/factories/lsp16-universal-factory', text: 'Factory that facilitates the deployment of smart contracts at the same address across multiple chains.', }, { title: '🧩 LSP17', name: 'Contract Extension', - link: '/standards/generic-standards/lsp17-contract-extension', - + link: '/standards/accounts/lsp17-contract-extension', text: 'Extends smart contract functionalities with addable and removable plugins.', }, + { + title: '💸 LSP18', + name: 'Royalties', + link: 'https://github.com/lukso-network/LIPs/blob/main/LSPs/LSP-18-Royalties.md', + text: 'Set of data keys to store informations about royalty recipient addresses and their claimable percentage.', + }, { title: '🔄 LSP20', name: 'Call Verification', - link: '/standards/generic-standards/lsp20-call-verification', - + link: '/standards/accounts/lsp20-call-verification', text: 'Facilitates smart contract interactions without resolving the owner first.', }, { title: '🏭 LSP23', name: 'Linked Contracts Factory', - link: '/standards/generic-standards/lsp23-linked-contracts-factory', - + link: '/standards/factories/lsp23-linked-contracts-factory', text: 'Factory pattern standard for deploying two linked contracts across chains.', }, { title: '⛽ LSP25', name: 'Execute Relay Call', link: '/contracts/contracts/LSP25ExecuteRelayCall/LSP25MultiChannelNonce/', - - text: 'Factory pattern standard for deploying two linked contracts across chains.', + text: 'Generic interface for meta transactions, so that interactions and gas can be paid on behalf of users.', + }, + { + title: '🔍 LSP26', + name: 'Follower System', + link: '/standards/accounts/lsp26-follower-system', + text: 'Contract that act as a registry that keep track of a list of addresses that follow each other for social interactions.', }, ]; @@ -140,10 +146,13 @@ function StandardCard({ link, title, name, text }) { borderWidth: '1px', }} > -

{title}

-

- {name} -

+

+ {title} +

+

{name}

{text}

); @@ -153,32 +162,7 @@ export default function StandardsGallery() { return (
- {STANDARDS.slice(0, 3).map((standard) => ( - - ))} -
-
- {STANDARDS.slice(3, 6).map((standard) => ( - - ))} -
-
- {STANDARDS.slice(6, 9).map((standard) => ( - - ))} -
-
- {STANDARDS.slice(9, 12).map((standard) => ( - - ))} -
-
- {STANDARDS.slice(12, 15).map((standard) => ( - - ))} -
-
- {STANDARDS.slice(15).map((standard) => ( + {STANDARDS.map((standard) => ( ))}