diff --git a/.github/workflows/solc_version.yml b/.github/workflows/solc_version.yml index 6bfede0e1..6a7922d5d 100644 --- a/.github/workflows/solc_version.yml +++ b/.github/workflows/solc_version.yml @@ -90,6 +90,7 @@ jobs: lsp6/=packages/LSP6KeyManager/ \ lsp7/=packages/LSP7DigitalAsset/ \ lsp8/=packages/LSP8IdentifiableDigitalAsset/ \ + lsp9/=packages/LSP9Vault/ \ lsp10/=packages/LSP10ReceivedVaults/ \ lsp14/=packages/LSP14Ownable2Step/ \ lsp16/=packages/LSP16UniversalFactory/ \ @@ -111,6 +112,7 @@ jobs: lsp6/=packages/LSP6KeyManager/ \ lsp7/=packages/LSP7DigitalAsset/ \ lsp8/=packages/LSP8IdentifiableDigitalAsset/ \ + lsp9/=packages/LSP9Vault/ \ lsp10/=packages/LSP10ReceivedVaults/ \ lsp14/=packages/LSP14Ownable2Step/ \ lsp16/=packages/LSP16UniversalFactory/ \ diff --git a/.mythx.yml b/.mythx.yml index acd22b26c..73c1c368e 100644 --- a/.mythx.yml +++ b/.mythx.yml @@ -36,7 +36,7 @@ analyze: - contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8CappedSupply.sol - contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8Enumerable.sol # - Vault & Social Recovery - - contracts/LSP9Vault/LSP9Vault.sol + - lsp9/contracts/LSP9Vault.sol - contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.sol # Proxy version @@ -53,7 +53,7 @@ analyze: - contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8CappedSupplyInitAbstract.sol - contracts/LSP8IdentifiableDigitalAsset/extensions/LSP8EnumerableInitAbstract.sol # - Vault & Social Recovery - - contracts/LSP9Vault/LSP9VaultInit.sol + - lsp9/contracts/LSP9VaultInit.sol - contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecoveryInit.sol # Generic Modules & Factories diff --git a/contracts/Imports.sol b/contracts/Imports.sol new file mode 100644 index 000000000..351cefe28 --- /dev/null +++ b/contracts/Imports.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +// solhint-disable no-unused-import + +import {LSP9Vault} from "lsp9/contracts/LSP9Vault.sol"; +import {LSP9VaultInit} from "lsp9/contracts/LSP9VaultInit.sol"; diff --git a/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP/LSP1UniversalReceiverDelegateUP.sol b/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP/LSP1UniversalReceiverDelegateUP.sol index 09731f84b..f67cec8d7 100644 --- a/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP/LSP1UniversalReceiverDelegateUP.sol +++ b/contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP/LSP1UniversalReceiverDelegateUP.sol @@ -36,7 +36,7 @@ import { import { _TYPEID_LSP9_OwnershipTransferred_SenderNotification, _TYPEID_LSP9_OwnershipTransferred_RecipientNotification -} from "../../LSP9Vault/LSP9Constants.sol"; +} from "lsp9/contracts/LSP9Constants.sol"; // errors import {CannotRegisterEOAsAsAssets} from "../LSP1Errors.sol"; diff --git a/contracts/Mocks/ERC165Interfaces.sol b/contracts/Mocks/ERC165Interfaces.sol index f3e4af524..6ff562ba9 100644 --- a/contracts/Mocks/ERC165Interfaces.sol +++ b/contracts/Mocks/ERC165Interfaces.sol @@ -43,7 +43,7 @@ import { ILSP8IdentifiableDigitalAsset as ILSP8 } from "lsp8/contracts/ILSP8IdentifiableDigitalAsset.sol"; -import {ILSP9Vault as ILSP9} from "../LSP9Vault/ILSP9Vault.sol"; +import {ILSP9Vault as ILSP9} from "lsp9/contracts/ILSP9Vault.sol"; import { ILSP11BasicSocialRecovery as ILSP11 } from "../LSP11BasicSocialRecovery/ILSP11BasicSocialRecovery.sol"; @@ -66,7 +66,7 @@ import { import {_INTERFACEID_LSP6} from "lsp6/contracts/LSP6Constants.sol"; import {_INTERFACEID_LSP7} from "lsp7/contracts/LSP7Constants.sol"; import {_INTERFACEID_LSP8} from "lsp8/contracts/LSP8Constants.sol"; -import {_INTERFACEID_LSP9} from "../LSP9Vault/LSP9Constants.sol"; +import {_INTERFACEID_LSP9} from "lsp9/contracts/LSP9Constants.sol"; import { _INTERFACEID_LSP11 } from "../LSP11BasicSocialRecovery/LSP11Constants.sol"; diff --git a/contracts/Mocks/LSP1TypeIDsTester.sol b/contracts/Mocks/LSP1TypeIDsTester.sol index c89a19077..efab1031f 100644 --- a/contracts/Mocks/LSP1TypeIDsTester.sol +++ b/contracts/Mocks/LSP1TypeIDsTester.sol @@ -22,7 +22,7 @@ import { _TYPEID_LSP9_OwnershipTransferStarted, _TYPEID_LSP9_OwnershipTransferred_SenderNotification, _TYPEID_LSP9_OwnershipTransferred_RecipientNotification -} from "../LSP9Vault/LSP9Constants.sol"; +} from "lsp9/contracts/LSP9Constants.sol"; import { _TYPEID_LSP14_OwnershipTransferStarted, _TYPEID_LSP14_OwnershipTransferred_SenderNotification, diff --git a/contracts/Mocks/UPWithInstantAcceptOwnership.sol b/contracts/Mocks/UPWithInstantAcceptOwnership.sol index 8ca1dbeeb..a121db352 100644 --- a/contracts/Mocks/UPWithInstantAcceptOwnership.sol +++ b/contracts/Mocks/UPWithInstantAcceptOwnership.sol @@ -14,7 +14,7 @@ import { } from "lsp0/contracts/LSP0Constants.sol"; import { _TYPEID_LSP9_OwnershipTransferStarted -} from "../LSP9Vault/LSP9Constants.sol"; +} from "lsp9/contracts/LSP9Constants.sol"; import { _TYPEID_LSP14_OwnershipTransferStarted } from "lsp14/contracts/LSP14Constants.sol"; diff --git a/contracts/Mocks/UniversalReceivers/UniversalReceiverDelegateDataLYX.sol b/contracts/Mocks/UniversalReceivers/UniversalReceiverDelegateDataLYX.sol index d6589a8d1..381fab7d5 100644 --- a/contracts/Mocks/UniversalReceivers/UniversalReceiverDelegateDataLYX.sol +++ b/contracts/Mocks/UniversalReceivers/UniversalReceiverDelegateDataLYX.sol @@ -18,7 +18,7 @@ import {_TYPEID_LSP0_VALUE_RECEIVED} from "lsp0/contracts/LSP0Constants.sol"; import {_INTERFACEID_LSP1_DELEGATE} from "lsp1/contracts/LSP1Constants.sol"; -import {_TYPEID_LSP9_VALUE_RECEIVED} from "../../LSP9Vault/LSP9Constants.sol"; +import {_TYPEID_LSP9_VALUE_RECEIVED} from "lsp9/contracts/LSP9Constants.sol"; contract UniversalReceiverDelegateDataLYX is ERC165Storage, diff --git a/docs/contracts/LSP9Vault/LSP9Vault.md b/docs/contracts/lsp9/contracts/LSP9Vault.md similarity index 84% rename from docs/contracts/LSP9Vault/LSP9Vault.md rename to docs/contracts/lsp9/contracts/LSP9Vault.md index 2bfccb93c..da466f1ad 100644 --- a/docs/contracts/LSP9Vault/LSP9Vault.md +++ b/docs/contracts/lsp9/contracts/LSP9Vault.md @@ -5,12 +5,12 @@ :::info Standard Specifications -[`LSP-9-Vault`](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md) +[`LSP-9-Vault.sol`](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md) ::: :::info Solidity implementation -[`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +[`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) ::: @@ -27,8 +27,8 @@ When marked as 'public', a method can be called both externally and internally, :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#constructor) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#constructor) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) ::: @@ -63,8 +63,8 @@ Sets `initialOwner` as the contract owner and the `SupportedStandards:LSP9Vault` :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#fallback) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#fallback) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) ::: @@ -106,8 +106,8 @@ This function is executed when: :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#receive) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#receive) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) ::: @@ -135,8 +135,8 @@ Executed: :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#renounce_ownership_confirmation_delay) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#renounce_ownership_confirmation_delay) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY()` - Function selector: `0xead3fbdf` @@ -161,8 +161,8 @@ function RENOUNCE_OWNERSHIP_CONFIRMATION_DELAY() :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#renounce_ownership_confirmation_period) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#renounce_ownership_confirmation_period) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD()` - Function selector: `0x01bfba61` @@ -187,8 +187,8 @@ function RENOUNCE_OWNERSHIP_CONFIRMATION_PERIOD() :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#version) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#version) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `VERSION()` - Function selector: `0xffa1ad74` @@ -212,8 +212,8 @@ _Contract version._ :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#acceptownership) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#acceptownership) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `acceptOwnership()` - Function selector: `0x79ba5097` @@ -247,8 +247,8 @@ Transfer ownership of the contract from the current [`owner()`](#owner) to the [ :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#batchcalls) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#batchcalls) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `batchCalls(bytes[])` - Function selector: `0x6963d438` @@ -286,8 +286,8 @@ Allows a caller to batch different function calls in one call. Perform a `delega :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#execute) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#execute) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `execute(uint256,address,uint256,bytes)` - Function selector: `0x44c028fe` @@ -360,8 +360,8 @@ Generic executor function to: :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#executebatch) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#executebatch) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `executeBatch(uint256[],address[],uint256[],bytes[])` - Function selector: `0x31858452` @@ -429,8 +429,8 @@ Batch executor function that behaves the same as [`execute`](#execute) but allow :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#getdata) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#getdata) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `getData(bytes32)` - Function selector: `0x54f6127f` @@ -462,8 +462,8 @@ Get in the ERC725Y storage the bytes data stored at a specific data key `dataKey :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#getdatabatch) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#getdatabatch) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `getDataBatch(bytes32[])` - Function selector: `0xdedff9c6` @@ -497,8 +497,8 @@ Get in the ERC725Y storage the bytes data stored at multiple data keys `dataKeys :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#owner) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#owner) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `owner()` - Function selector: `0x8da5cb5b` @@ -522,8 +522,8 @@ Returns the address of the current owner. :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#pendingowner) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#pendingowner) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `pendingOwner()` - Function selector: `0xe30c3978` @@ -553,8 +553,8 @@ The address that ownership of the contract is transferred to. This address may u :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#renounceownership) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#renounceownership) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `renounceOwnership()` - Function selector: `0x715018a6` @@ -592,8 +592,8 @@ Renounce ownership of the contract in a 2-step process. :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#setdata) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#setdata) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `setData(bytes32,bytes)` - Function selector: `0x7f23690c` @@ -636,8 +636,8 @@ Sets a single bytes value `dataValue` in the ERC725Y storage for a specific data :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#setdatabatch) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#setdatabatch) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `setDataBatch(bytes32[],bytes[])` - Function selector: `0x97902421` @@ -680,8 +680,8 @@ Batch data setting function that behaves the same as [`setData`](#setdata) but a :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#supportsinterface) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#supportsinterface) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `supportsInterface(bytes4)` - Function selector: `0x01ffc9a7` @@ -713,8 +713,8 @@ Achieves the goal of [ERC-165] to detect supported interfaces and [LSP-17-Contra :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#transferownership) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#transferownership) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `transferOwnership(address)` - Function selector: `0xf2fde38b` @@ -750,8 +750,8 @@ Initiate the process of transferring ownership of the contract by setting the ne :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#universalreceiver) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#universalreceiver) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Function signature: `universalReceiver(bytes32,bytes)` - Function selector: `0x6bb56a14` @@ -1193,8 +1193,8 @@ Internal method restricting the call to the owner of the contract and the Univer :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#contractcreated) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#contractcreated) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Event signature: `ContractCreated(uint256,address,uint256,bytes32)` - Event topic hash: `0xa1fb700aaee2ae4a2ff6f91ce7eba292f89c2f5488b8ec4c5c5c8150692595c3` @@ -1228,8 +1228,8 @@ Emitted when a new contract was created and deployed. :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#datachanged) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#datachanged) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Event signature: `DataChanged(bytes32,bytes)` - Event topic hash: `0xece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b2` @@ -1256,8 +1256,8 @@ Emitted when data at a specific `dataKey` was changed to a new value `dataValue` :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#executed) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#executed) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Event signature: `Executed(uint256,address,uint256,bytes4)` - Event topic hash: `0x4810874456b8e6487bd861375cf6abd8e1c8bb5858c8ce36a86a04dabfac199e` @@ -1291,8 +1291,8 @@ Emitted when calling an address `target` (EOA or contract) with `value`. :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#ownershiprenounced) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#ownershiprenounced) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Event signature: `OwnershipRenounced()` - Event topic hash: `0xd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce` @@ -1312,8 +1312,8 @@ Emitted when the ownership of the contract has been renounced. :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#ownershiptransferstarted) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#ownershiptransferstarted) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Event signature: `OwnershipTransferStarted(address,address)` - Event topic hash: `0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700` @@ -1343,8 +1343,8 @@ Emitted when [`transferOwnership(..)`](#transferownership) was called and the fi :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#ownershiptransferred) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#ownershiptransferred) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Event signature: `OwnershipTransferred(address,address)` - Event topic hash: `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0` @@ -1370,8 +1370,8 @@ event OwnershipTransferred( :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#renounceownershipstarted) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#renounceownershipstarted) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Event signature: `RenounceOwnershipStarted()` - Event topic hash: `0x81b7f830f1f0084db6497c486cbe6974c86488dcc4e3738eab94ab6d6b1653e7` @@ -1391,8 +1391,8 @@ Emitted when starting the [`renounceOwnership(..)`](#renounceownership) 2-step p :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#universalreceiver) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#universalreceiver) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Event signature: `UniversalReceiver(address,uint256,bytes32,bytes,bytes)` - Event topic hash: `0x9c3ba68eb5742b8e3961aea0afc7371a71bf433c8a67a831803b64c064a178c2` @@ -1432,8 +1432,8 @@ Emitted when the [`universalReceiver`](#universalreceiver) function was called w :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#erc725x_contractdeploymentfailed) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#erc725x_contractdeploymentfailed) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `ERC725X_ContractDeploymentFailed()` - Error hash: `0x0b07489b` @@ -1451,8 +1451,8 @@ Reverts when contract deployment failed via [`execute`](#execute) or [`executeBa :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#erc725x_createoperationsrequireemptyrecipientaddress) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#erc725x_createoperationsrequireemptyrecipientaddress) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `ERC725X_CreateOperationsRequireEmptyRecipientAddress()` - Error hash: `0x3041824a` @@ -1470,8 +1470,8 @@ Reverts when passing a `to` address that is not `address(0)` (= address zero) wh :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#erc725x_executeparametersemptyarray) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#erc725x_executeparametersemptyarray) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `ERC725X_ExecuteParametersEmptyArray()` - Error hash: `0xe9ad2b5f` @@ -1489,8 +1489,8 @@ Reverts when one of the array parameter provided to the [`executeBatch`](#execut :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#erc725x_executeparameterslengthmismatch) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#erc725x_executeparameterslengthmismatch) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `ERC725X_ExecuteParametersLengthMismatch()` - Error hash: `0x3ff55f4d` @@ -1508,8 +1508,8 @@ Reverts when there is not the same number of elements in the `operationTypes`, ` :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#erc725x_insufficientbalance) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#erc725x_insufficientbalance) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `ERC725X_InsufficientBalance(uint256,uint256)` - Error hash: `0x0df9a8f8` @@ -1534,8 +1534,8 @@ Reverts when trying to send more native tokens `value` than available in current :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#erc725x_msgvaluedisallowedinstaticcall) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#erc725x_msgvaluedisallowedinstaticcall) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `ERC725X_MsgValueDisallowedInStaticCall()` - Error hash: `0x72f2bc6a` @@ -1553,8 +1553,8 @@ Reverts when trying to send native tokens (`value` / `values[]` parameter of [`e :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#erc725x_nocontractbytecodeprovided) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#erc725x_nocontractbytecodeprovided) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `ERC725X_NoContractBytecodeProvided()` - Error hash: `0xb81cd8d9` @@ -1572,8 +1572,8 @@ Reverts when no contract bytecode was provided as parameter when trying to deplo :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#erc725x_unknownoperationtype) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#erc725x_unknownoperationtype) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `ERC725X_UnknownOperationType(uint256)` - Error hash: `0x7583b3bc` @@ -1597,8 +1597,8 @@ Reverts when the `operationTypeProvided` is none of the default operation types :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#erc725y_datakeysvalueslengthmismatch) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#erc725y_datakeysvalueslengthmismatch) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `ERC725Y_DataKeysValuesLengthMismatch()` - Error hash: `0x3bcc8979` @@ -1616,8 +1616,8 @@ Reverts when there is not the same number of elements in the `datakeys` and `dat :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#erc725y_msgvaluedisallowed) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#erc725y_msgvaluedisallowed) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `ERC725Y_MsgValueDisallowed()` - Error hash: `0xf36ba737` @@ -1635,8 +1635,8 @@ Reverts when sending value to the [`setData`](#setdata) or [`setDataBatch`](#set :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#lsp14callernotpendingowner) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#lsp14callernotpendingowner) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `LSP14CallerNotPendingOwner(address)` - Error hash: `0x451e4528` @@ -1660,8 +1660,8 @@ Reverts when the `caller` that is trying to accept ownership of the contract is :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#lsp14cannottransferownershiptoself) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#lsp14cannottransferownershiptoself) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `LSP14CannotTransferOwnershipToSelf()` - Error hash: `0xe052a6f8` @@ -1681,8 +1681,8 @@ Reverts when trying to transfer ownership to the `address(this)`. :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#lsp14mustacceptownershipinseparatetransaction) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#lsp14mustacceptownershipinseparatetransaction) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `LSP14MustAcceptOwnershipInSeparateTransaction()` - Error hash: `0x5758dd07` @@ -1702,8 +1702,8 @@ Reverts when pending owner accept ownership in the same transaction of transferr :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#lsp14notinrenounceownershipinterval) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#lsp14notinrenounceownershipinterval) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `LSP14NotInRenounceOwnershipInterval(uint256,uint256)` - Error hash: `0x1b080942` @@ -1733,8 +1733,8 @@ Reverts when trying to renounce ownership before the initial confirmation delay. :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#lsp1delegatenotallowedtosetdatakey) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#lsp1delegatenotallowedtosetdatakey) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `LSP1DelegateNotAllowedToSetDataKey(bytes32)` - Error hash: `0x199611f1` @@ -1760,8 +1760,8 @@ Reverts when the Vault version of [LSP1UniversalReceiverDelegate] sets LSP1/6/17 :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#noextensionfoundforfunctionselector) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#noextensionfoundforfunctionselector) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `NoExtensionFoundForFunctionSelector(bytes4)` - Error hash: `0xbb370b2b` @@ -1785,8 +1785,8 @@ reverts when there is no extension for the function selector being called with :::note References -- Specification details: [**LSP-9-Vault**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.md#ownablecallernottheowner) -- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/contracts/LSP9Vault/LSP9Vault.sol) +- Specification details: [**LSP-9-Vault.sol**](https://github.com/lukso-network/lips/tree/main/LSPs/LSP-9-Vault.sol.md#ownablecallernottheowner) +- Solidity implementation: [`LSP9Vault.sol`](https://github.com/lukso-network/lsp-smart-contracts/blob/develop/lsp9/contracts/LSP9Vault.sol) - Error signature: `OwnableCallerNotTheOwner(address)` - Error hash: `0xbf1169c5` diff --git a/dodoc/config.ts b/dodoc/config.ts index bf8087dce..a7053830d 100644 --- a/dodoc/config.ts +++ b/dodoc/config.ts @@ -9,7 +9,7 @@ export const dodocConfig = { 'contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateUP/LSP1UniversalReceiverDelegateUP.sol', 'contracts/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault/LSP1UniversalReceiverDelegateVault.sol', 'lsp6/contracts/LSP6KeyManager.sol', - 'contracts/LSP9Vault/LSP9Vault.sol', + 'lsp9/contracts/LSP9Vault.sol', 'contracts/LSP11BasicSocialRecovery/LSP11BasicSocialRecovery.sol', 'lsp14/contracts/LSP14Ownable2Step.sol', 'lsp16/contracts/LSP16UniversalFactory.sol', diff --git a/package-lock.json b/package-lock.json index 6834bfe1a..ae37c829a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "lsp6": "*", "lsp7": "*", "lsp8": "*", + "lsp9": "*", "solidity-bytes-utils": "0.8.0", "universalprofile": "*" }, @@ -13595,6 +13596,10 @@ "resolved": "packages/LSP8IdentifiableDigitalAsset", "link": true }, + "node_modules/lsp9": { + "resolved": "packages/LSP9Vault", + "link": true + }, "node_modules/ltgt": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", @@ -24255,6 +24260,34 @@ "typescript": "^5.3.3" } }, + "packages/LSP9Vault": { + "name": "lsp9", + "version": "0.12.1", + "license": "Apache-2.0", + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3", + "lsp1": "*", + "lsp6": "*" + }, + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^2.0.2", + "@typechain/ethers-v5": "^10.2.0", + "dotenv": "^16.0.3", + "eslint-config-custom": "*", + "ethers": "^5.7.2", + "hardhat": "^2.13.0", + "hardhat-contract-sizer": "^2.8.0", + "hardhat-deploy": "^0.11.25", + "hardhat-gas-reporter": "^1.0.9", + "hardhat-packager": "^1.4.2", + "solhint": "^3.3.6", + "ts-node": "^10.2.0", + "tsconfig": "*", + "typechain": "^8.0.0", + "typescript": "^5.3.3" + } + }, "packages/UniversalProfile": { "name": "universalprofile", "version": "0.12.1", @@ -34880,6 +34913,30 @@ "typescript": "^5.3.3" } }, + "lsp9": { + "version": "file:packages/LSP9Vault", + "requires": { + "@erc725/smart-contracts": "^7.0.0", + "@nomicfoundation/hardhat-toolbox": "^2.0.2", + "@openzeppelin/contracts": "^4.9.3", + "@typechain/ethers-v5": "^10.2.0", + "dotenv": "^16.0.3", + "eslint-config-custom": "*", + "ethers": "^5.7.2", + "hardhat": "^2.13.0", + "hardhat-contract-sizer": "^2.8.0", + "hardhat-deploy": "^0.11.25", + "hardhat-gas-reporter": "^1.0.9", + "hardhat-packager": "^1.4.2", + "lsp1": "*", + "lsp6": "*", + "solhint": "^3.3.6", + "ts-node": "^10.2.0", + "tsconfig": "*", + "typechain": "^8.0.0", + "typescript": "^5.3.3" + } + }, "ltgt": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", diff --git a/package.json b/package.json index 0cf56ad4b..43c550da6 100644 --- a/package.json +++ b/package.json @@ -119,6 +119,7 @@ "lsp6": "*", "lsp7": "*", "lsp8": "*", + "lsp9": "*", "lsp10": "*", "lsp14": "*", "lsp16": "*", diff --git a/packages/LSP9Vault/.eslintrc.js b/packages/LSP9Vault/.eslintrc.js new file mode 100644 index 000000000..03ee7431b --- /dev/null +++ b/packages/LSP9Vault/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['custom'], +}; diff --git a/packages/LSP9Vault/.solhint.json b/packages/LSP9Vault/.solhint.json new file mode 100644 index 000000000..26e01c48a --- /dev/null +++ b/packages/LSP9Vault/.solhint.json @@ -0,0 +1,25 @@ +{ + "extends": "solhint:recommended", + "rules": { + "avoid-sha3": "error", + "avoid-suicide": "error", + "avoid-throw": "error", + "avoid-tx-origin": "error", + "check-send-result": "error", + "compiler-version": ["error", "^0.8.0"], + "func-visibility": ["error", { "ignoreConstructors": true }], + "not-rely-on-block-hash": "error", + "not-rely-on-time": "error", + "reentrancy": "error", + "constructor-syntax": "error", + "private-vars-leading-underscore": ["error", { "strict": false }], + "imports-on-top": "error", + "visibility-modifier-order": "error", + "no-unused-import": "error", + "no-global-import": "error", + "reason-string": ["warn", { "maxLength": 120 }], + "avoid-low-level-calls": "off", + "no-empty-blocks": ["error", { "ignoreConstructors": true }], + "custom-errors": "off" + } +} diff --git a/packages/LSP9Vault/README.md b/packages/LSP9Vault/README.md new file mode 100644 index 000000000..45ac3b95b --- /dev/null +++ b/packages/LSP9Vault/README.md @@ -0,0 +1,3 @@ +# LSP9 Vault + +Package for the LSP9 Vault standard. diff --git a/contracts/LSP9Vault/ILSP9Vault.sol b/packages/LSP9Vault/contracts/ILSP9Vault.sol similarity index 100% rename from contracts/LSP9Vault/ILSP9Vault.sol rename to packages/LSP9Vault/contracts/ILSP9Vault.sol diff --git a/contracts/LSP9Vault/LSP9Constants.sol b/packages/LSP9Vault/contracts/LSP9Constants.sol similarity index 100% rename from contracts/LSP9Vault/LSP9Constants.sol rename to packages/LSP9Vault/contracts/LSP9Constants.sol diff --git a/contracts/LSP9Vault/LSP9Errors.sol b/packages/LSP9Vault/contracts/LSP9Errors.sol similarity index 100% rename from contracts/LSP9Vault/LSP9Errors.sol rename to packages/LSP9Vault/contracts/LSP9Errors.sol diff --git a/contracts/LSP9Vault/LSP9Vault.sol b/packages/LSP9Vault/contracts/LSP9Vault.sol similarity index 96% rename from contracts/LSP9Vault/LSP9Vault.sol rename to packages/LSP9Vault/contracts/LSP9Vault.sol index e4fc24b78..96aac5653 100644 --- a/contracts/LSP9Vault/LSP9Vault.sol +++ b/packages/LSP9Vault/contracts/LSP9Vault.sol @@ -5,7 +5,7 @@ pragma solidity ^0.8.4; import { OwnableUnset } from "@erc725/smart-contracts/contracts/custom/OwnableUnset.sol"; -import {Version} from "../Version.sol"; +import {Version} from "./Version.sol"; import {LSP9VaultCore} from "./LSP9VaultCore.sol"; // libraries @@ -17,7 +17,7 @@ import { _LSP9_SUPPORTED_STANDARDS_VALUE, _TYPEID_LSP9_VALUE_RECEIVED, _TYPEID_LSP9_OwnershipTransferred_RecipientNotification -} from "../LSP9Vault/LSP9Constants.sol"; +} from "./LSP9Constants.sol"; /** * @title Implementation of LSP9Vault built on top of [ERC725], [LSP-1-UniversalReceiver] diff --git a/contracts/LSP9Vault/LSP9VaultCore.sol b/packages/LSP9Vault/contracts/LSP9VaultCore.sol similarity index 100% rename from contracts/LSP9Vault/LSP9VaultCore.sol rename to packages/LSP9Vault/contracts/LSP9VaultCore.sol diff --git a/contracts/LSP9Vault/LSP9VaultInit.sol b/packages/LSP9Vault/contracts/LSP9VaultInit.sol similarity index 97% rename from contracts/LSP9Vault/LSP9VaultInit.sol rename to packages/LSP9Vault/contracts/LSP9VaultInit.sol index 427275349..2e288e8ee 100644 --- a/contracts/LSP9Vault/LSP9VaultInit.sol +++ b/packages/LSP9Vault/contracts/LSP9VaultInit.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.4; // modules -import {Version} from "../Version.sol"; +import {Version} from "./Version.sol"; import {LSP9VaultInitAbstract} from "./LSP9VaultInitAbstract.sol"; /** diff --git a/contracts/LSP9Vault/LSP9VaultInitAbstract.sol b/packages/LSP9Vault/contracts/LSP9VaultInitAbstract.sol similarity index 98% rename from contracts/LSP9Vault/LSP9VaultInitAbstract.sol rename to packages/LSP9Vault/contracts/LSP9VaultInitAbstract.sol index c6d5a1b34..05b4f043b 100644 --- a/contracts/LSP9Vault/LSP9VaultInitAbstract.sol +++ b/packages/LSP9Vault/contracts/LSP9VaultInitAbstract.sol @@ -19,7 +19,7 @@ import { _LSP9_SUPPORTED_STANDARDS_VALUE, _TYPEID_LSP9_VALUE_RECEIVED, _TYPEID_LSP9_OwnershipTransferred_RecipientNotification -} from "../LSP9Vault/LSP9Constants.sol"; +} from "./LSP9Constants.sol"; /** * @title Inheritable Proxy Implementation of LSP9Vault built on top of ERC725, LSP1UniversalReceiver diff --git a/packages/LSP9Vault/contracts/Version.sol b/packages/LSP9Vault/contracts/Version.sol new file mode 100644 index 000000000..9227ca267 --- /dev/null +++ b/packages/LSP9Vault/contracts/Version.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.4; + +abstract contract Version { + /** + * @dev Get the version of the contract. + * @notice Contract version. + * + * @return The version of the the contract. + */ + // DO NOT CHANGE + // Comments block below is used by release-please to automatically update the version in this file. + // x-release-please-start-version + string public constant VERSION = "0.12.1"; + + // x-release-please-end +} diff --git a/packages/LSP9Vault/hardhat.config.ts b/packages/LSP9Vault/hardhat.config.ts new file mode 100644 index 000000000..d818a205d --- /dev/null +++ b/packages/LSP9Vault/hardhat.config.ts @@ -0,0 +1,128 @@ +import { HardhatUserConfig } from 'hardhat/config'; +import { NetworkUserConfig } from 'hardhat/types'; +import { config as dotenvConfig } from 'dotenv'; +import { resolve } from 'path'; + +/** + * this package includes: + * - @nomiclabs/hardhat-ethers + * - @nomicfoundation/hardhat-chai-matchers + * - @nomicfoundation/hardhat-network-helpers + * - @nomiclabs/hardhat-etherscan + * - hardhat-gas-reporter (is this true? Why do we have it as a separate dependency?) + * - @typechain/hardhat + * - solidity-coverage + */ +import '@nomicfoundation/hardhat-toolbox'; + +// additional hardhat plugins +import 'hardhat-packager'; +import 'hardhat-contract-sizer'; +import 'hardhat-deploy'; + +// custom built hardhat plugins and scripts +// can be imported here (e.g: docs generation, gas benchmark, etc...) + +dotenvConfig({ path: resolve(__dirname, './.env') }); + +function getTestnetChainConfig(): NetworkUserConfig { + const config: NetworkUserConfig = { + live: true, + url: 'https://rpc.testnet.lukso.network', + chainId: 4201, + }; + + if (process.env.CONTRACT_VERIFICATION_TESTNET_PK !== undefined) { + config['accounts'] = [process.env.CONTRACT_VERIFICATION_TESTNET_PK]; + } + + return config; +} + +const config: HardhatUserConfig = { + defaultNetwork: 'hardhat', + networks: { + hardhat: { + live: false, + saveDeployments: false, + allowBlocksWithSameTimestamp: true, + }, + luksoTestnet: getTestnetChainConfig(), + }, + namedAccounts: { + owner: 0, + }, + // uncomment if the contracts from this LSP package must be deployed at deterministic + // // addresses across multiple chains + // deterministicDeployment: { + // luksoTestnet: { + // // Nick Factory. See https://github.com/Arachnid/deterministic-deployment-proxy + // factory: '0x4e59b44847b379578588920ca78fbf26c0b4956c', + // deployer: '0x3fab184622dc19b6109349b94811493bf2a45362', + // funding: '0x0000000000000000000000000000000000000000000000000000000000000000', + // signedTx: + // '0xf8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222', + // }, + // }, + etherscan: { + apiKey: 'no-api-key-needed', + customChains: [ + { + network: 'luksoTestnet', + chainId: 4201, + urls: { + apiURL: 'https://api.explorer.execution.testnet.lukso.network/api', + browserURL: 'https://explorer.execution.testnet.lukso.network/', + }, + }, + ], + }, + gasReporter: { + enabled: true, + currency: 'USD', + gasPrice: 21, + excludeContracts: ['Helpers/'], + src: './contracts', + showMethodSig: true, + }, + solidity: { + version: '0.8.17', + settings: { + optimizer: { + enabled: true, + /** + * Optimize for how many times you intend to run the code. + * Lower values will optimize more for initial deployment cost, higher + * values will optimize more for high-frequency usage. + * @see https://docs.soliditylang.org/en/v0.8.6/internals/optimizer.html#opcode-based-optimizer-module + */ + runs: 1000, + }, + outputSelection: { + '*': { + '*': ['storageLayout'], + }, + }, + }, + }, + packager: { + // What contracts to keep the artifacts and the bindings for. + contracts: [], + // Whether to include the TypeChain factories or not. + // If this is enabled, you need to run the TypeChain files through the TypeScript compiler before shipping to the registry. + includeFactories: true, + }, + paths: { + artifacts: 'artifacts', + tests: 'tests', + }, + typechain: { + outDir: 'types', + target: 'ethers-v5', + }, + mocha: { + timeout: 10000000, + }, +}; + +export default config; diff --git a/packages/LSP9Vault/package.json b/packages/LSP9Vault/package.json new file mode 100644 index 000000000..23fcc9e43 --- /dev/null +++ b/packages/LSP9Vault/package.json @@ -0,0 +1,47 @@ +{ + "name": "lsp9", + "version": "0.12.1", + "description": "Package for the LSP9 Vault standard", + "license": "Apache-2.0", + "author": "", + "keywords": [ + "LUKSO", + "LSP", + "Blockchain", + "Standards", + "Smart Contracts", + "Ethereum", + "EVM", + "Solidity" + ], + "scripts": { + "build": "hardhat compile --show-stack-traces", + "clean": "hardhat clean", + "format": "prettier --write .", + "lint": "eslint . --ext .ts,.js", + "lint:solidity": "solhint 'contracts/**/*.sol' && prettier --check 'contracts/**/*.sol'" + }, + "dependencies": { + "@erc725/smart-contracts": "^7.0.0", + "@openzeppelin/contracts": "^4.9.3", + "lsp1": "*", + "lsp6": "*" + }, + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^2.0.2", + "@typechain/ethers-v5": "^10.2.0", + "dotenv": "^16.0.3", + "eslint-config-custom": "*", + "ethers": "^5.7.2", + "hardhat": "^2.13.0", + "hardhat-contract-sizer": "^2.8.0", + "hardhat-deploy": "^0.11.25", + "hardhat-gas-reporter": "^1.0.9", + "hardhat-packager": "^1.4.2", + "solhint": "^3.3.6", + "ts-node": "^10.2.0", + "tsconfig": "*", + "typechain": "^8.0.0", + "typescript": "^5.3.3" + } +} diff --git a/packages/LSP9Vault/tsconfig.json b/packages/LSP9Vault/tsconfig.json new file mode 100644 index 000000000..b7a34e03f --- /dev/null +++ b/packages/LSP9Vault/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "tsconfig/contracts.json", + "include": ["**/*.ts"] +} diff --git a/remappings.txt b/remappings.txt index 4fed33070..267cec095 100644 --- a/remappings.txt +++ b/remappings.txt @@ -15,6 +15,7 @@ lsp5/=packages/LSP5ReceivedAssets/ lsp6/=packages/LSP6KeyManager/ lsp7/=packages/LSP7DigitalAsset/ lsp8/=packages/LSP8IdentifiableDigitalAsset/ +lsp9/=packages/LSP9Vault/ lsp10/=packages/LSP10ReceivedVaults/ lsp14/=packages/LSP14Ownable2Step/ lsp16/=packages/LSP16UniversalFactory/ diff --git a/tests/LSP14Ownable2Step/LSP14Ownable2Step.behaviour.ts b/tests/LSP14Ownable2Step/LSP14Ownable2Step.behaviour.ts index d317c2926..8eb06d789 100644 --- a/tests/LSP14Ownable2Step/LSP14Ownable2Step.behaviour.ts +++ b/tests/LSP14Ownable2Step/LSP14Ownable2Step.behaviour.ts @@ -288,9 +288,9 @@ export const shouldBehaveLikeLSP14 = ( it('should instantiate the renounceOwnership process correctly', async () => { const _renounceOwnershipStartedAtAfterSlotNumber = Number.parseInt( ( - await artifacts.getBuildInfo('contracts/LSP9Vault/LSP9Vault.sol:LSP9Vault') + await artifacts.getBuildInfo('lsp9/contracts/LSP9Vault.sol:LSP9Vault') )?.output.contracts[ - 'contracts/LSP9Vault/LSP9Vault.sol' + 'lsp9/contracts/LSP9Vault.sol' // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ].LSP9Vault.storageLayout.storage.filter((elem) => { @@ -377,9 +377,9 @@ export const shouldBehaveLikeLSP14 = ( it('should initialize again if the confirmation period passed', async () => { const _renounceOwnershipStartedAtAfterSlotNumber = Number.parseInt( ( - await artifacts.getBuildInfo('contracts/LSP9Vault/LSP9Vault.sol:LSP9Vault') + await artifacts.getBuildInfo('lsp9/contracts/LSP9Vault.sol:LSP9Vault') )?.output.contracts[ - 'contracts/LSP9Vault/LSP9Vault.sol' + 'lsp9/contracts/LSP9Vault.sol' // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ].LSP9Vault.storageLayout.storage.filter((elem) => { @@ -444,9 +444,9 @@ export const shouldBehaveLikeLSP14 = ( it('should have reset the `_renounceOwnershipStartedAt` state variable to zero', async () => { const _renounceOwnershipStartedAtAfterSlotNumber = Number.parseInt( ( - await artifacts.getBuildInfo('contracts/LSP9Vault/LSP9Vault.sol:LSP9Vault') + await artifacts.getBuildInfo('lsp9/contracts/LSP9Vault.sol:LSP9Vault') )?.output.contracts[ - 'contracts/LSP9Vault/LSP9Vault.sol' + 'lsp9/contracts/LSP9Vault.sol' // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ].LSP9Vault.storageLayout.storage.filter((elem) => { @@ -532,10 +532,8 @@ export const shouldBehaveLikeLSP14 = ( it('should instantiate the renounceOwnership process in 2 steps correctly', async () => { const _renounceOwnershipStartedAtAfterSlotNumber = Number.parseInt( - ( - await artifacts.getBuildInfo('contracts/LSP9Vault/LSP9Vault.sol:LSP9Vault') - )?.output.contracts[ - 'contracts/LSP9Vault/LSP9Vault.sol' + (await artifacts.getBuildInfo('lsp9/contracts/LSP9Vault.sol:LSP9Vault'))?.output.contracts[ + 'lsp9/contracts/LSP9Vault.sol' // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore ].LSP9Vault.storageLayout.storage.filter((elem) => { diff --git a/tests/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.test.ts b/tests/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.test.ts index 7c1aee722..b652927d6 100644 --- a/tests/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.test.ts +++ b/tests/LSP1UniversalReceiver/LSP1UniversalReceiverDelegateVault.test.ts @@ -1,8 +1,8 @@ import { ERC725YDataKeys, OPERATION_TYPES } from '../../constants'; +import { LSP9Vault__factory } from 'lsp9/types'; import { LSP1UniversalReceiverDelegateVault__factory, UniversalProfile__factory, - LSP9Vault__factory, } from '../../types'; import { diff --git a/tests/LSP9Vault/LSP9Vault.behaviour.ts b/tests/LSP9Vault/LSP9Vault.behaviour.ts index 0901ffd82..486f5b683 100644 --- a/tests/LSP9Vault/LSP9Vault.behaviour.ts +++ b/tests/LSP9Vault/LSP9Vault.behaviour.ts @@ -4,9 +4,9 @@ import type { TransactionResponse } from '@ethersproject/abstract-provider'; import { expect } from 'chai'; // types +import { LSP9Vault } from 'lsp9/types'; import { LSP6KeyManager, - LSP9Vault, UniversalProfile, UniversalReceiverDelegateVaultSetter__factory, UniversalReceiverDelegateVaultReentrantA__factory, diff --git a/tests/LSP9Vault/LSP9Vault.test.ts b/tests/LSP9Vault/LSP9Vault.test.ts index 98d70c3a2..6233eb22b 100644 --- a/tests/LSP9Vault/LSP9Vault.test.ts +++ b/tests/LSP9Vault/LSP9Vault.test.ts @@ -6,7 +6,8 @@ import { shouldBehaveLikeLSP14, } from '../LSP14Ownable2Step/LSP14Ownable2Step.behaviour'; -import { LSP9Vault__factory, UniversalProfile, LSP6KeyManager } from '../../types'; +import { LSP9Vault__factory } from 'lsp9/types'; +import { UniversalProfile, LSP6KeyManager } from '../../types'; import { getNamedAccounts, diff --git a/tests/LSP9Vault/LSP9VaultInit.test.ts b/tests/LSP9Vault/LSP9VaultInit.test.ts index a0dda37cc..6ccba1685 100644 --- a/tests/LSP9Vault/LSP9VaultInit.test.ts +++ b/tests/LSP9Vault/LSP9VaultInit.test.ts @@ -3,7 +3,8 @@ import { expect } from 'chai'; import { shouldBehaveLikeLSP14 } from '../LSP14Ownable2Step/LSP14Ownable2Step.behaviour'; -import { LSP9VaultInit__factory, UniversalProfile, LSP6KeyManager } from '../../types'; +import { LSP9VaultInit__factory } from 'lsp9/types'; +import { UniversalProfile, LSP6KeyManager } from '../../types'; import { getNamedAccounts,