Skip to content

Commit

Permalink
build: setup LSP package template with instructions
Browse files Browse the repository at this point in the history
  • Loading branch information
CJ42 committed Jan 17, 2024
1 parent f32cb2f commit 7df5889
Show file tree
Hide file tree
Showing 7 changed files with 268 additions and 0 deletions.
73 changes: 73 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file added packages/lsp-name/.eslintrc.js
Empty file.
Empty file added packages/lsp-name/.solhint.json
Empty file.
15 changes: 15 additions & 0 deletions packages/lsp-name/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# LSP Package Template

This project can be used as a skeleton to build a package for a LSP implementation in Solidity (LUKSO Standard Proposal)

It is based on Hardhat.

## How to setup a LSP as a package?

1. Copy the `template/` folder and paste it under the `packages/` folder. Then rename this `template/` folder that you copied with the LSP name.

```
cp template/ packages/lsp-name/
```

2. Update the `"name"` and `"description"` field inside the `package.json` for this LSP package you just created.
128 changes: 128 additions & 0 deletions packages/lsp-name/hardhat.config.ts
Original file line number Diff line number Diff line change
@@ -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;
48 changes: 48 additions & 0 deletions packages/lsp-name/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"name": "lspN",
"version": "0.12.1",
"description": "Package for the LSPN <write the standard name here> 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'",
"test": "hardhat test --no-compile tests/*.test.ts",
"test:foundry": "forge test --no-match-test Skip -vvv",
"test:coverage": "hardhat coverage"
},
"dependencies": {
"@erc725/smart-contracts": "^7.0.0",
"@openzeppelin/contracts": "^4.9.3"
},
"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": "^4.9.5"
}
}
4 changes: 4 additions & 0 deletions packages/lsp-name/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"extends": "tsconfig/contracts.json",
"include": ["**/*.ts"]
}

0 comments on commit 7df5889

Please sign in to comment.