Coder Social home page Coder Social logo

lukso-network / tools-lsp-factory Goto Github PK

View Code? Open in Web Editor NEW
15.0 11.0 16.0 8.47 MB

Easy deployments of LSP standard Universal Profile and Digital Asset smart contracts

Home Page: https://www.npmjs.com/package/@lukso/lsp-factory.js

License: Apache License 2.0

TypeScript 99.28% JavaScript 0.72%
jslib erc725 web3

tools-lsp-factory's Introduction

@lukso/lsp-factory.js

Helper library to allow simple deployments of UniversalProfiles and LSP7 and LSP8 Digital Assets.

NPM version Tests Passing

Issues GitHub pull requests

For more information see Documentation.

Install

npm install @lukso/lsp-factory.js

Setup

import { LSPFactory } from '@lukso/lsp-factory.js';

const provider = 'https://rpc.testnet.lukso.network'; // RPC url used to connect to the network

const lspFactory = new LSPFactory(provider, {
  deployKey: '0x...'; // Private key of the account which will deploy UPs
  chainId: 2828, // Chain Id of the network you want to connect to
});

Usage

Deploying an ERC725Account (Universal Profile)

// Deploy LSP3 Account
const myContracts = await lspFactory.UniversalProfile.deploy({
  controllerAddresses: ['0x...'], // Address which will controll the UP
  lsp3Profile: {
    name: 'My Universal Profile',
    description: 'My cool Universal Profile',
    profileImage: [
      {
        width: 500,
        height: 500,
        verification: {
          method: 'keccak256(bytes)',
          data: '0xfdafad027ecfe57eb4ad047b938805d1dec209d6e9f960fc320d7b9b11cbed14',
        },
        url: 'ipfs://QmPLqMFHxiUgYAom3Zg4SiwoxDaFcZpHXpCmiDzxrtjSGp',
      },
    ],
    backgroundImage: [
      {
        width: 500,
        height: 500,
        verification: {
          method: 'keccak256(bytes)',
          data: '0xfdafad027ecfe57eb4ad047b938805d1dec209d6e9f960fc320d7b9b11cbed14',
        },
        url: 'ipfs://QmPLqMFHxiUgYAom3Zg4SiwoxDaFcZpHXpCmiDzxrtjSGp',
      },
    ],
    tags: ['Fashion', 'Design'],
    links: [{ title: 'My Website', url: 'www.my-website.com' }],
  },
});

const myUPAddress = myContracts.LSP0ERC725Account.address;

Using Deployment events

The onDeployEvents option can be used to for real-time frontend updates.

const profileDeploymentEvents = [];

const myContracts = await lspFactory.UniversalProfile.deploy(
  {
    controllerAddresses: ['0x...'], // Address which will controll the UP
  },
  {
    onDeployEvents: {
      next: (deploymentEvent: DeploymentEvent) => {
        profileDeploymentEvents.push(deploymentEvent);
      },
      error: (error) => {
        console.error(error);
      },
      complete: () => {
        console.log(profileDeploymentEvents);
      },
    },
  }
);

Contributing

Please check CONTRIBUTING.

License

lsp-factory.js is Apache 2.0 licensed.

tools-lsp-factory's People

Contributors

b00ste avatar biancabuzea200 avatar callumgrindle avatar cj42 avatar dependabot[bot] avatar dzbo avatar fhildeb avatar frozeman avatar github-actions[bot] avatar hugoo avatar jeneavranceanu avatar kalote avatar magalimorin18 avatar richtera avatar rryter avatar yamenmerhi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tools-lsp-factory's Issues

Deploy using a signature from the User

What this issue is about?

  • The current way of deploying the UniversalProfile - KM - URD requires the user to call claimOwnership(...) on the KM at the end of the process.
    Another way of taking the full responsibility for deploying is to set permission for the key of the lsp-factory, then the key of the lsp-factory will claimOwnership and then remove itself (permissions).

Enhancement

  • This process can be enhanced by requesting a signature from the user to deploy; this signature will be executed by the lsp-factory through executeRelayCall(...) and it contains a payload to claimOwnership(..).
    This signature could be determined beforehand as non of the parameters is depending on the potential owner of the UP.

This means that the address that will sign this message, will not affect any parameter of this signed message.

A signed message is constructed of :

  • chainId (independent from the signer)
  • Address of KM (independent from the signer, the KM address depends on the address of the UP)
  • nonce (independent from the signer because any number at the beginning will work fine)
  • calldata (independent from the signer, it will always be 0xfunctionSelectorForClaimOwnership)

So we have 3 fields already determined: chainId, nonce and calldata.
We just need the address of the UP and the address of the KM, that could be determined by precomputing using UniversalFacotry or any create2 factory contract that the lsp-factory could use.

This method could lower the gas cost of setting the UniversalProfile - KM - URD for the user with a little bit of extra complexity ๐Ÿ˜„ .

nonce issues when using Ganache network

  • I'm submitting a ...
    [x] bug report
    [ ] feature request
    [ ] question about the decisions made in the repository
    [ ] question about how to use this project

  • Summary

  • Using lsp-factory with ganache test network causes nonce issues when deploying UniversalProfiles. Transaction nonces seem to be out by 2

  • Other information

the tx doesn't have the correct nonce. account has nonce of: 8 tx has nonce of: 10

Similar problems occur when using a local hardhart network, though turning automining off fixes it. Possibly related. Problem persists when using ganache whether automining is on or off

Import trace warnings

  • I'm submitting a ...
    Improvement suggestion

  • Summary
    Granted this is for plain .js files most likely, but still.

When using lsp-factory package in typescript, I get following warnings, which are annoying. The code still works, just issues with importing in .ts files.

Import trace for requested module:
./node_modules/@lukso/lsp-factory.js/build/module/src/lib/helpers/config.helper.js
./node_modules/@lukso/lsp-factory.js/build/module/src/lib/classes/universal-profile.js
./node_modules/@lukso/lsp-factory.js/build/module/src/index.js
./components/assets/Assets.tsx
./app/portfolio/page.tsx
 โš  ./node_modules/@lukso/lsp-factory.js/build/module/src/lib/helpers/config.helper.js
Should not import the named export 'version' (imported as 'lspSmartContractsVersion') from default-exporting module (only default export is available soon)

Import trace for requested module:
./node_modules/@lukso/lsp-factory.js/build/module/src/lib/helpers/config.helper.js
./node_modules/@lukso/lsp-factory.js/build/module/src/lib/classes/universal-profile.js
./node_modules/@lukso/lsp-factory.js/build/module/src/index.js
./components/assets/Assets.tsx
./app/portfolio/page.tsx
 โš  ./node_modules/@lukso/lsp-factory.js/build/module/src/lib/helpers/config.helper.js
Should not import the named export 'version' (imported as 'lspSmartContractsVersion') from default-exporting module (only default export is available soon)

Import trace for requested module:
./node_modules/@lukso/lsp-factory.js/build/module/src/lib/helpers/config.helper.js
./node_modules/@lukso/lsp-factory.js/build/module/src/lib/classes/universal-profile.js
./node_modules/@lukso/lsp-factory.js/build/module/src/index.js
./components/assets/Assets.tsx
./app/portfolio/page.tsx

Remove deployBaseContracts function and use a flag in contractDeploymentOptions

I'm submitting a ...

  • feature request

Summary

Remove this function: lspFactory.DigitalAsset.deployBaseContracts(); which is confusing.

https://docs.lukso.tech/tools/lsp-factoryjs/classes/DigitalAsset#deploybasecontracts

And add a flag in contractDeploymentOptions to force deploy from base

lspFactory.DigitalAsset.deployLSP7DigitalAsset(
 { ... },
 { useProxy: false});

TODO:

Delete all following functions:

deployBaseContracts
deployLSP7DigitalAsset
deployLSP7DigitalAssetReactive
deployLSP8IdentifiableDigitalAsset
deployLSP8IdentifiableDigitalAssetReactive

reactive: bool should go in the deployment options, not in the function name.

LSP7DigitalAsset.deploy()
LSP8IdentifiableDigitalAsset.deploy()

no more Reactive or not in the function name.

options:

reactive: bool,
version: '0.1.0' || '0x123456...' (use this as base contract, check if has code) || '0x12345...' (byteCode itself, use this ,no proxy)

[] update the docs accordingly
The page explaining the deployment options should be very clear

Additional arguments in constructor for customized contract

  • I'm submitting a ...
    [ ] bug report
    [X ] feature request
    [ ] question about the decisions made in the repository
    [ ] question about how to use this project

  • Summary

We are deploying a customized LSP7 contract using lsp-factory. We customized the constructor to include more arguments. Is there anyway we pass that arguments in lsp-factory? We studied the docs but do not find an available way.

  • Other information (e.g. detailed explanation, stack traces, related issues, suggestions how to fix, links for us to have context, eg. StackOverflow, personal fork, etc.)

Cannot estimate gas while deploying a Universal Profile

'{"jsonrpc":"2.0","id":54,"error":{"code":-32000,"message":"gas required exceeds allowance (0)"}}\n',

The entire error response looks like:

<ref *1> Error: cannot estimate gas; transaction may fail or may require manual gas limit (error={"reason":"cannot estimate gas; transaction may fail or may require manual gas limit","code":"UNPREDICTABLE_GAS_LIMIT","error":{"reason":"processing response error","code":"SERVER_ERROR","body":"{\"jsonrpc\":\"2.0\",\"id\":54,\"error\":{\"code\":-32000,\"message\":\"gas required exceeds allowance (0)\"}}\n","error":{"code":-32000},"requestBody":"{\"method\":\"eth_estimateGas\",\"params\":[{\"type\":\"0x2\",\"maxFeePerGas\":\"0x9502f90e\",\"maxPriorityFeePerGas\":\"0x9502f900\",\"from\":\"0xf95d78d71d5f6a7c1f1657c93e0fcdf0067e088e\",\"data\":\"0x3d602d80600a3d3981f3363d3d373d3d3d363d73d4ea48069862de4fd64131c7f551e866873b5e475af43d82803e903d91602b57fd5bf3000000000000000000000000f95d78d71d5f6a7c1f1657c93e0fcdf0067e088e\"}],\"id\":54,\"jsonrpc\":\"2.0\"}","requestMethod":"POST","url":"https://rpc.l16.lukso.network"},"method":"estimateGas","transaction":{"from":"0xF95d78d71d5f6A7c1f1657C93E0FcDF0067e088e","maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x9502f900"},"maxFeePerGas":{"type":"BigNumber","hex":"0x9502f90e"},"data":"0x3d602d80600a3d3981f3363d3d373d3d3d363d73d4ea48069862de4fd64131c7f551e866873b5e475af43d82803e903d91602b57fd5bf3000000000000000000000000f95d78d71d5f6a7c1f1657c93e0fcdf0067e088e","type":2,"accessList":null}}, tx={"data":"0x3d602d80600a3d3981f3363d3d373d3d3d363d73d4ea48069862de4fd64131c7f551e866873b5e475af43d82803e903d91602b57fd5bf3000000000000000000000000f95d78d71d5f6a7c1f1657c93e0fcdf0067e088e","nonce":0,"from":"0xF95d78d71d5f6A7c1f1657C93E0FcDF0067e088e","type":2,"maxFeePerGas":{"type":"BigNumber","hex":"0x9502f90e"},"maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x9502f900"},"gasLimit":{},"chainId":{}}, code=UNPREDICTABLE_GAS_LIMIT, version=abstract-signer/5.5.0)
    at Logger.makeError (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/logger/lib/index.js:199:21)
    at Logger.throwError (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/logger/lib/index.js:208:20)
    at /home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/abstract-signer/lib/index.js:365:47
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Promise.all (index 6) {
  reason: 'cannot estimate gas; transaction may fail or may require manual gas limit',
  code: 'UNPREDICTABLE_GAS_LIMIT',
  error: Error: cannot estimate gas; transaction may fail or may require manual gas limit (error={"reason":"processing response error","code":"SERVER_ERROR","body":"{\"jsonrpc\":\"2.0\",\"id\":54,\"error\":{\"code\":-32000,\"message\":\"gas required exceeds allowance (0)\"}}\n","error":{"code":-32000},"requestBody":"{\"method\":\"eth_estimateGas\",\"params\":[{\"type\":\"0x2\",\"maxFeePerGas\":\"0x9502f90e\",\"maxPriorityFeePerGas\":\"0x9502f900\",\"from\":\"0xf95d78d71d5f6a7c1f1657c93e0fcdf0067e088e\",\"data\":\"0x3d602d80600a3d3981f3363d3d373d3d3d363d73d4ea48069862de4fd64131c7f551e866873b5e475af43d82803e903d91602b57fd5bf3000000000000000000000000f95d78d71d5f6a7c1f1657c93e0fcdf0067e088e\"}],\"id\":54,\"jsonrpc\":\"2.0\"}","requestMethod":"POST","url":"https://rpc.l16.lukso.network"}, method="estimateGas", transaction={"from":"0xF95d78d71d5f6A7c1f1657C93E0FcDF0067e088e","maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x9502f900"},"maxFeePerGas":{"type":"BigNumber","hex":"0x9502f90e"},"data":"0x3d602d80600a3d3981f3363d3d373d3d3d363d73d4ea48069862de4fd64131c7f551e866873b5e475af43d82803e903d91602b57fd5bf3000000000000000000000000f95d78d71d5f6a7c1f1657c93e0fcdf0067e088e","type":2,"accessList":null}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.5.0)
      at Logger.makeError (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/logger/lib/index.js:199:21)
      at Logger.throwError (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/logger/lib/index.js:208:20)
      at checkError (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:126:16)
      at JsonRpcProvider.<anonymous> (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:659:47)
      at step (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:48:23)
      at Object.throw (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:29:53)
      at rejected (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:21:65)
      at processTicksAndRejections (node:internal/process/task_queues:96:5) {
    reason: 'cannot estimate gas; transaction may fail or may require manual gas limit',
    code: 'UNPREDICTABLE_GAS_LIMIT',
    error: Error: processing response error (body="{\"jsonrpc\":\"2.0\",\"id\":54,\"error\":{\"code\":-32000,\"message\":\"gas required exceeds allowance (0)\"}}\n", error={"code":-32000}, requestBody="{\"method\":\"eth_estimateGas\",\"params\":[{\"type\":\"0x2\",\"maxFeePerGas\":\"0x9502f90e\",\"maxPriorityFeePerGas\":\"0x9502f900\",\"from\":\"0xf95d78d71d5f6a7c1f1657c93e0fcdf0067e088e\",\"data\":\"0x3d602d80600a3d3981f3363d3d373d3d3d363d73d4ea48069862de4fd64131c7f551e866873b5e475af43d82803e903d91602b57fd5bf3000000000000000000000000f95d78d71d5f6a7c1f1657c93e0fcdf0067e088e\"}],\"id\":54,\"jsonrpc\":\"2.0\"}", requestMethod="POST", url="https://rpc.l16.lukso.network", code=SERVER_ERROR, version=web/5.5.0)
        at Logger.makeError (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/logger/lib/index.js:199:21)
        at Logger.throwError (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/logger/lib/index.js:208:20)
        at /home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/web/lib/index.js:266:32
        at step (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/web/lib/index.js:33:23)
        at Object.next (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/web/lib/index.js:14:53)
        at fulfilled (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/web/lib/index.js:5:58)
        at processTicksAndRejections (node:internal/process/task_queues:96:5) {
      reason: 'processing response error',
      code: 'SERVER_ERROR',
      body: '{"jsonrpc":"2.0","id":54,"error":{"code":-32000,"message":"gas required exceeds allowance (0)"}}\n',
      error: Error: gas required exceeds allowance (0)
          at getResult (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:142:21)
          at processJsonFunc (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/web/lib/index.js:309:22)
          at /home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/web/lib/index.js:241:46
          at step (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/web/lib/index.js:33:23)
          at Object.next (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/web/lib/index.js:14:53)
          at fulfilled (/home/sagaranand/Documents/workspace-open/lukso/demo01/node_modules/@lukso/lsp-factory.js/node_modules/@ethersproject/web/lib/index.js:5:58)
          at processTicksAndRejections (node:internal/process/task_queues:96:5) {
        code: -32000,
        data: undefined
      },
      requestBody: '{"method":"eth_estimateGas","params":[{"type":"0x2","maxFeePerGas":"0x9502f90e","maxPriorityFeePerGas":"0x9502f900","from":"0xf95d78d71d5f6a7c1f1657c93e0fcdf0067e088e","data":"0x3d602d80600a3d3981f3363d3d373d3d3d363d73d4ea48069862de4fd64131c7f551e866873b5e475af43d82803e903d91602b57fd5bf3000000000000000000000000f95d78d71d5f6a7c1f1657c93e0fcdf0067e088e"}],"id":54,"jsonrpc":"2.0"}',
      requestMethod: 'POST',
      url: 'https://rpc.l16.lukso.network'
    },
    method: 'estimateGas',
    transaction: {
      from: '0xF95d78d71d5f6A7c1f1657C93E0FcDF0067e088e',
      maxPriorityFeePerGas: BigNumber { _hex: '0x9502f900', _isBigNumber: true },
      maxFeePerGas: BigNumber { _hex: '0x9502f90e', _isBigNumber: true },
      data: '0x3d602d80600a3d3981f3363d3d373d3d3d363d73d4ea48069862de4fd64131c7f551e866873b5e475af43d82803e903d91602b57fd5bf3000000000000000000000000f95d78d71d5f6a7c1f1657c93e0fcdf0067e088e',
      type: 2,
      accessList: null
    }
  },
  tx: {
    data: '0x3d602d80600a3d3981f3363d3d373d3d3d363d73d4ea48069862de4fd64131c7f551e866873b5e475af43d82803e903d91602b57fd5bf3000000000000000000000000f95d78d71d5f6a7c1f1657c93e0fcdf0067e088e',
    nonce: 0,
    from: '0xF95d78d71d5f6A7c1f1657C93E0FcDF0067e088e',
    type: 2,
    maxFeePerGas: BigNumber { _hex: '0x9502f90e', _isBigNumber: true },
    maxPriorityFeePerGas: BigNumber { _hex: '0x9502f900', _isBigNumber: true },
    gasLimit: Promise { <rejected> [Circular *1] },
    chainId: Promise { 2828 }
  }
}

Note:
I can confirm that the EOA being used has the token balance of 10 LXY (can be seen here: https://explorer.execution.l16.lukso.network/address/0x174Be8Ac01Af45EcD980739d3b6a42C9fc860Cd8)

Any pointers here would be helpful. Thanks!

Missing declaration files in TypeScript build

I'm submitting a...

bug report

Summary

Declaration files generated by TypeChain are not included by TS in the build folder.
This may lead to build error from user side.

Other information (e.g. detailed explanation, stack traces, related issues, suggestions how to fix, links for us to have context, eg. StackOverflow, personal fork, etc.)

Flagged by Bon on Discord link

image

Resources

Add a script which checks if contract addresses in src/versions.json are valid + add CI check

Adding a script which checks if the addresses set in the src/versions.json file are:

  • deployed
  • valid

by comparing the bytecode with the ones generated from typechain (npm run generate-types).

This would prevent us from copy/pasting wrong contract addresses, etc.

and allow an automated control in the CI.

As probably no one will take the time to check if the updated contracts addresses are valid.

Make gasPrice dynamic

At the moment, the gas price is hardcoded at 10Gwei.

The lib should adapt this value automatically.

Crash on import in nextjs

  • I'm submitting a ...
    [X ] bug report
    [ ] feature request
    [ ] question about the decisions made in the repository
    [ ] question about how to use this project

  • Summary
    I am using nextjs and when importing lsp-factory module I get a crash: TypeError: Object prototype may only be an Object or null: undefined.

@lukso/lsp-factory.js: "^1.1.5"

I tried to load module couple ways:

// import lspFactory from '@lukso/lsp-factory.js' // crash here

const doSomething = async ({ name, about, profileImage }) => {
  const lspFactory = (await import('@lukso/lsp-factory.js')).default() // crash here
}

I tried to narrow it down, seems like by simply importing jimp it breaks the app.

  • Other information (e.g. detailed explanation, stack traces, related issues, suggestions how to fix, links for us to have context, eg. StackOverflow, personal fork, etc.)
next-dev.js?3515:32 TypeError: Object prototype may only be an Object or null: undefined
    at Function.create (<anonymous>)
    at Object.inherits (VM18381 inherits_browser.js:6)
    at eval (VM18906 chunkstream.js:22)
    at Object../node_modules/pngjs/lib/chunkstream.js (node_modules_lukso_lsp-factory_js_build_module_src_index_js.js:7127)
    at Object.options.factory (webpack.js?ts=1640812154560:660)
    at __webpack_require__ (webpack.js?ts=1640812154560:37)
    at fn (webpack.js?ts=1640812154560:329)
    at eval (VM18905 parser-async.js:5)
    at Object../node_modules/pngjs/lib/parser-async.js (node_modules_lukso_lsp-factory_js_build_module_src_index_js.js:7270)
    at Object.options.factory (webpack.js?ts=1640812154560:660)
    at __webpack_require__ (webpack.js?ts=1640812154560:37)
    at fn (webpack.js?ts=1640812154560:329)
    at eval (VM18885 png.js:7)
    at Object../node_modules/pngjs/lib/png.js (node_modules_lukso_lsp-factory_js_build_module_src_index_js.js:7314)
    at Object.options.factory (webpack.js?ts=1640812154560:660)
    at __webpack_require__ (webpack.js?ts=1640812154560:37)
    at fn (webpack.js?ts=1640812154560:329)
    at eval (VM18884 index.js:12)
    at Object../node_modules/@jimp/png/es/index.js (node_modules_lukso_lsp-factory_js_build_module_src_index_js.js:2325)
    at Object.options.factory (webpack.js?ts=1640812154560:660)
    at __webpack_require__ (webpack.js?ts=1640812154560:37)
    at fn (webpack.js?ts=1640812154560:329)
    at eval (VM18878 index.js:14)
    at Object../node_modules/@jimp/types/es/index.js (node_modules_lukso_lsp-factory_js_build_module_src_index_js.js:2347)
    at Object.options.factory (webpack.js?ts=1640812154560:660)
    at __webpack_require__ (webpack.js?ts=1640812154560:37)
    at fn (webpack.js?ts=1640812154560:329)
    at eval (VM18828 index.js:12)
    at Object../node_modules/jimp/es/index.js (node_modules_lukso_lsp-factory_js_build_module_src_index_js.js:6438)
    at Object.options.factory (webpack.js?ts=1640812154560:660)
    at __webpack_require__ (webpack.js?ts=1640812154560:37)
    at fn (webpack.js?ts=1640812154560:329)
    at eval (VM18720 uploader.helper.js:16)
    at Module../node_modules/@lukso/lsp-factory.js/build/module/src/lib/helpers/uploader.helper.js (node_modules_lukso_lsp-factory_js_build_module_src_index_js.js:2446)
    at Module.options.factory (webpack.js?ts=1640812154560:660)
    at __webpack_require__ (webpack.js?ts=1640812154560:37)
    at fn (webpack.js?ts=1640812154560:329)
    at eval (VM18719 lsp3-universal-profile.js:10)
    at Module../node_modules/@lukso/lsp-factory.js/build/module/src/lib/classes/lsp3-universal-profile.js (node_modules_lukso_lsp-factory_js_build_module_src_index_js.js:2391)
    at Module.options.factory (webpack.js?ts=1640812154560:660)
    at __webpack_require__ (webpack.js?ts=1640812154560:37)
    at fn (webpack.js?ts=1640812154560:329)
    at eval (VM18318 lsp-factory.js:7)
    at Module../node_modules/@lukso/lsp-factory.js/build/module/src/lib/lsp-factory.js (node_modules_lukso_lsp-factory_js_build_module_src_index_js.js:2501)
    at Module.options.factory (webpack.js?ts=1640812154560:660)
    at __webpack_require__ (webpack.js?ts=1640812154560:37)
    at fn (webpack.js?ts=1640812154560:329)
    at eval (VM18317 index.js:6)
    at Module../node_modules/@lukso/lsp-factory.js/build/module/src/index.js (node_modules_lukso_lsp-factory_js_build_module_src_index_js.js:2369)
    at Module.options.factory (webpack.js?ts=1640812154560:660)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.