mirror of
https://github.com/placeholder-soft/storytime.git
synced 2026-01-12 15:24:45 +08:00
feat: init avax nft contract
This commit is contained in:
22
contracts-avax/.envrc
Normal file
22
contracts-avax/.envrc
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
PATH_add node_modules/.bin
|
||||
|
||||
export ETH_NODE_RPC_URL="http://localhost:8545"
|
||||
|
||||
# Wallet
|
||||
# ==================
|
||||
# Mnemonic: test test test test test test test test test test test junk
|
||||
# Derivation path: m/44'/60'/0'/0/
|
||||
export ETH_ADDRESS=""
|
||||
export ETH_PRIVATE_KEY=""
|
||||
|
||||
export ETH_USER_PRIVATE_KEY=""
|
||||
|
||||
export ETHERSCAN_API_KEY=""
|
||||
|
||||
source_env .envrc.foundry
|
||||
|
||||
if [ -f .envrc.override ]; then
|
||||
source_env .envrc.override
|
||||
fi
|
||||
6
contracts-avax/.envrc.foundry
Normal file
6
contracts-avax/.envrc.foundry
Normal file
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PATH_add tools/foundry/scripts
|
||||
PATH_add tools/foundry/bin
|
||||
|
||||
export FOUNDRY_DIR="$PWD/tools/foundry"
|
||||
15
contracts-avax/.gitignore
vendored
Normal file
15
contracts-avax/.gitignore
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
node_modules
|
||||
.env
|
||||
coverage
|
||||
coverage.json
|
||||
typechain
|
||||
typechain-types
|
||||
|
||||
# Hardhat files
|
||||
cache
|
||||
artifacts
|
||||
|
||||
|
||||
out
|
||||
cache_forge
|
||||
.envrc.override
|
||||
15
contracts-avax/.prettierrc.json
Normal file
15
contracts-avax/.prettierrc.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"overrides": [
|
||||
{
|
||||
"files": "*.sol",
|
||||
"options": {
|
||||
"printWidth": 80,
|
||||
"tabWidth": 4,
|
||||
"useTabs": false,
|
||||
"singleQuote": false,
|
||||
"bracketSpacing": false,
|
||||
"explicitTypes": "preserve"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
1
contracts-avax/.tool-versions
Normal file
1
contracts-avax/.tool-versions
Normal file
@@ -0,0 +1 @@
|
||||
nodejs 18.16.0
|
||||
5
contracts-avax/README.md
Normal file
5
contracts-avax/README.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## Todo - Documentation
|
||||
|
||||
```shell
|
||||
forge build
|
||||
```
|
||||
46
contracts-avax/contracts/StorytimeNFT.sol
Normal file
46
contracts-avax/contracts/StorytimeNFT.sol
Normal file
@@ -0,0 +1,46 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.20;
|
||||
|
||||
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
|
||||
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
|
||||
import "@openzeppelin/contracts/access/Ownable.sol";
|
||||
|
||||
contract StoryTimeNFT is ERC721, ERC721Enumerable, Ownable {
|
||||
uint256 private _nextTokenId;
|
||||
|
||||
constructor(
|
||||
address initialOwner
|
||||
) ERC721("StoryTimeNFT", "ST") Ownable(initialOwner) {}
|
||||
|
||||
function _baseURI() internal pure override returns (string memory) {
|
||||
return "https://avax.storytime.one";
|
||||
}
|
||||
|
||||
function safeMint(address to) public onlyOwner {
|
||||
uint256 tokenId = _nextTokenId++;
|
||||
_safeMint(to, tokenId);
|
||||
}
|
||||
|
||||
// The following functions are overrides required by Solidity.
|
||||
|
||||
function _update(
|
||||
address to,
|
||||
uint256 tokenId,
|
||||
address auth
|
||||
) internal override(ERC721, ERC721Enumerable) returns (address) {
|
||||
return super._update(to, tokenId, auth);
|
||||
}
|
||||
|
||||
function _increaseBalance(
|
||||
address account,
|
||||
uint128 value
|
||||
) internal override(ERC721, ERC721Enumerable) {
|
||||
super._increaseBalance(account, value);
|
||||
}
|
||||
|
||||
function supportsInterface(
|
||||
bytes4 interfaceId
|
||||
) public view override(ERC721, ERC721Enumerable) returns (bool) {
|
||||
return super.supportsInterface(interfaceId);
|
||||
}
|
||||
}
|
||||
9
contracts-avax/foundry.toml
Normal file
9
contracts-avax/foundry.toml
Normal file
@@ -0,0 +1,9 @@
|
||||
[profile.default]
|
||||
src = 'contracts'
|
||||
out = 'out'
|
||||
libs = ['node_modules', 'lib']
|
||||
test = 'test'
|
||||
solc = "0.8.20"
|
||||
|
||||
cache_path = 'cache_forge'
|
||||
etherscan_api_key = "${ETHERSCAN_API_KEY}"
|
||||
10
contracts-avax/hardhat.config.ts
Normal file
10
contracts-avax/hardhat.config.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { HardhatUserConfig } from "hardhat/config";
|
||||
import "@nomicfoundation/hardhat-toolbox";
|
||||
import "@nomicfoundation/hardhat-foundry";
|
||||
|
||||
|
||||
const config: HardhatUserConfig = {
|
||||
solidity: "0.8.19",
|
||||
};
|
||||
|
||||
export default config;
|
||||
31
contracts-avax/package.json
Normal file
31
contracts-avax/package.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"name": "contracts-avax",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"author": "zitao xiong",
|
||||
"license": "MIT",
|
||||
"packageManager": "yarn@1.22.19",
|
||||
"devDependencies": {
|
||||
"@nomicfoundation/hardhat-chai-matchers": "^2.0.0",
|
||||
"@nomicfoundation/hardhat-ethers": "^3.0.0",
|
||||
"@nomicfoundation/hardhat-foundry": "^1.0.2",
|
||||
"@nomicfoundation/hardhat-network-helpers": "^1.0.0",
|
||||
"@nomicfoundation/hardhat-toolbox": "^3.0.0",
|
||||
"@nomicfoundation/hardhat-verify": "^1.0.0",
|
||||
"@typechain/ethers-v6": "^0.4.0",
|
||||
"@typechain/hardhat": "^8.0.0",
|
||||
"@types/chai": "^4.2.0",
|
||||
"@types/mocha": ">=9.1.0",
|
||||
"@types/node": "^20.4.5",
|
||||
"chai": "^4.2.0",
|
||||
"hardhat": "^2.17.1",
|
||||
"hardhat-gas-reporter": "^1.0.8",
|
||||
"prettier": "^2.8.8",
|
||||
"prettier-plugin-organize-imports": "^3.2.2",
|
||||
"solhint": "^3.5.1",
|
||||
"solidity-coverage": "^0.8.1",
|
||||
"ts-node": "^10.9.1",
|
||||
"typechain": "^8.2.0",
|
||||
"typescript": "^5.1.6"
|
||||
}
|
||||
}
|
||||
4314
contracts-avax/pnpm-lock.yaml
generated
Normal file
4314
contracts-avax/pnpm-lock.yaml
generated
Normal file
File diff suppressed because it is too large
Load Diff
7
contracts-avax/remappings.txt
Normal file
7
contracts-avax/remappings.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
ds-test/=lib/forge-std/lib/ds-test/src/
|
||||
erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/
|
||||
eth-gas-reporter/=node_modules/eth-gas-reporter/
|
||||
forge-std/=lib/forge-std/src/
|
||||
hardhat/=node_modules/hardhat/
|
||||
@openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/
|
||||
@openzeppelin/=lib/openzeppelin-contracts/
|
||||
15
contracts-avax/script/deploy.avax.s.sol
Normal file
15
contracts-avax/script/deploy.avax.s.sol
Normal file
@@ -0,0 +1,15 @@
|
||||
// SPDX-License-Identifier: UNLICENSED
|
||||
pragma solidity ^0.8.13;
|
||||
|
||||
import "forge-std/Script.sol";
|
||||
|
||||
contract DeployGoerli is Script {
|
||||
using Strings for address;
|
||||
uint256 deployerPrivateKey = vm.envUint("ETH_PRIVATE_KEY");
|
||||
using Address for address payable;
|
||||
|
||||
function run() external {
|
||||
vm.startBroadcast(deployerPrivateKey);
|
||||
address owner = vm.addr(deployerPrivateKey);
|
||||
}
|
||||
}
|
||||
10
contracts-avax/test/Vault.t.sol
Normal file
10
contracts-avax/test/Vault.t.sol
Normal file
@@ -0,0 +1,10 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
pragma solidity ^0.8.17;
|
||||
|
||||
import "forge-std/Test.sol";
|
||||
|
||||
contract VaultTest is Test {
|
||||
receive() external payable {}
|
||||
|
||||
function setUp() public {}
|
||||
}
|
||||
4
contracts-avax/tools/.gitignore
vendored
Normal file
4
contracts-avax/tools/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
foundry/bin/**/*
|
||||
!foundry/bin/.gitkeep
|
||||
foundry/share/**/*
|
||||
!foundry/share/.gitkeep
|
||||
0
contracts-avax/tools/foundry/bin/.gitkeep
Normal file
0
contracts-avax/tools/foundry/bin/.gitkeep
Normal file
318
contracts-avax/tools/foundry/scripts/foundryup
Executable file
318
contracts-avax/tools/foundry/scripts/foundryup
Executable file
@@ -0,0 +1,318 @@
|
||||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
BASE_DIR=${XDG_CONFIG_HOME:-$HOME}
|
||||
FOUNDRY_DIR=${FOUNDRY_DIR:-"$BASE_DIR/.foundry"}
|
||||
FOUNDRY_BIN_DIR="$FOUNDRY_DIR/bin"
|
||||
FOUNDRY_MAN_DIR="$FOUNDRY_DIR/share/man/man1"
|
||||
|
||||
BINS=(forge cast anvil chisel)
|
||||
|
||||
export RUSTFLAGS="-C target-cpu=native"
|
||||
|
||||
main() {
|
||||
need_cmd git
|
||||
need_cmd curl
|
||||
|
||||
while [[ $1 ]]; do
|
||||
case $1 in
|
||||
--) shift; break;;
|
||||
|
||||
-r|--repo) shift; FOUNDRYUP_REPO=$1;;
|
||||
-b|--branch) shift; FOUNDRYUP_BRANCH=$1;;
|
||||
-v|--version) shift; FOUNDRYUP_VERSION=$1;;
|
||||
-p|--path) shift; FOUNDRYUP_LOCAL_REPO=$1;;
|
||||
-P|--pr) shift; FOUNDRYUP_PR=$1;;
|
||||
-C|--commit) shift; FOUNDRYUP_COMMIT=$1;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
warn "unknown option: $1"
|
||||
usage
|
||||
exit 1
|
||||
esac; shift
|
||||
done
|
||||
|
||||
# Print the banner after successfully parsing args
|
||||
banner
|
||||
|
||||
if [ -n "$FOUNDRYUP_PR" ]; then
|
||||
if [ -z "$FOUNDRYUP_BRANCH" ]; then
|
||||
FOUNDRYUP_BRANCH="refs/pull/$FOUNDRYUP_PR/head"
|
||||
else
|
||||
err "can't use --pr and --branch at the same time"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Installs foundry from a local repository if --path parameter is provided
|
||||
if [[ -n "$FOUNDRYUP_LOCAL_REPO" ]]; then
|
||||
need_cmd cargo
|
||||
|
||||
# Ignore branches/versions as we do not want to modify local git state
|
||||
if [ -n "$FOUNDRYUP_REPO" ] || [ -n "$FOUNDRYUP_BRANCH" ] || [ -n "$FOUNDRYUP_VERSION" ]; then
|
||||
warn "--branch, --version, and --repo arguments are ignored during local install"
|
||||
fi
|
||||
|
||||
# Enter local repo and build
|
||||
say "installing from $FOUNDRYUP_LOCAL_REPO"
|
||||
cd "$FOUNDRYUP_LOCAL_REPO"
|
||||
ensure cargo build --release # need 4 speed
|
||||
|
||||
for bin in "${BINS[@]}"; do
|
||||
# Remove prior installations if they exist
|
||||
rm -f "$FOUNDRY_BIN_DIR/$bin"
|
||||
# Symlink from local repo binaries to bin dir
|
||||
ensure ln -s "$PWD/target/release/$bin" "$FOUNDRY_BIN_DIR/$bin"
|
||||
done
|
||||
|
||||
say "done"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
FOUNDRYUP_REPO=${FOUNDRYUP_REPO:-foundry-rs/foundry}
|
||||
|
||||
# Install by downloading binaries
|
||||
if [[ "$FOUNDRYUP_REPO" == "foundry-rs/foundry" && -z "$FOUNDRYUP_BRANCH" && -z "$FOUNDRYUP_COMMIT" ]]; then
|
||||
FOUNDRYUP_VERSION=${FOUNDRYUP_VERSION:-nightly}
|
||||
FOUNDRYUP_TAG=$FOUNDRYUP_VERSION
|
||||
|
||||
# Normalize versions (handle channels, versions without v prefix
|
||||
if [[ "$FOUNDRYUP_VERSION" == "nightly" ]]; then
|
||||
# Locate real nightly tag
|
||||
SHA=$(ensure curl -sSf "https://api.github.com/repos/$FOUNDRYUP_REPO/git/refs/tags/nightly" \
|
||||
| grep -Eo '"sha"[^,]*' \
|
||||
| grep -Eo '[^:]*$' \
|
||||
| tr -d '"' \
|
||||
| tr -d ' ' \
|
||||
| cut -d ':' -f2 )
|
||||
FOUNDRYUP_TAG="nightly-${SHA}"
|
||||
elif [[ "$FOUNDRYUP_VERSION" == nightly* ]]; then
|
||||
FOUNDRYUP_VERSION="nightly"
|
||||
elif [[ "$FOUNDRYUP_VERSION" == [[:digit:]]* ]]; then
|
||||
# Add v prefix
|
||||
FOUNDRYUP_VERSION="v${FOUNDRYUP_VERSION}"
|
||||
FOUNDRYUP_TAG="${FOUNDRYUP_VERSION}"
|
||||
fi
|
||||
|
||||
say "installing foundry (version ${FOUNDRYUP_VERSION}, tag ${FOUNDRYUP_TAG})"
|
||||
|
||||
PLATFORM="$(uname -s)"
|
||||
EXT="tar.gz"
|
||||
case $PLATFORM in
|
||||
Linux)
|
||||
PLATFORM="linux"
|
||||
;;
|
||||
Darwin)
|
||||
PLATFORM="darwin"
|
||||
;;
|
||||
MINGW*)
|
||||
EXT="zip"
|
||||
PLATFORM="win32"
|
||||
;;
|
||||
*)
|
||||
err "unsupported platform: $PLATFORM"
|
||||
;;
|
||||
esac
|
||||
|
||||
ARCHITECTURE="$(uname -m)"
|
||||
if [ "${ARCHITECTURE}" = "x86_64" ]; then
|
||||
# Redirect stderr to /dev/null to avoid printing errors if non Rosetta.
|
||||
if [ "$(sysctl -n sysctl.proc_translated 2>/dev/null)" = "1" ]; then
|
||||
ARCHITECTURE="arm64" # Rosetta.
|
||||
else
|
||||
ARCHITECTURE="amd64" # Intel.
|
||||
fi
|
||||
elif [ "${ARCHITECTURE}" = "arm64" ] ||[ "${ARCHITECTURE}" = "aarch64" ] ; then
|
||||
ARCHITECTURE="arm64" # Arm.
|
||||
else
|
||||
ARCHITECTURE="amd64" # Amd.
|
||||
fi
|
||||
|
||||
# Compute the URL of the release tarball in the Foundry repository.
|
||||
RELEASE_URL="https://github.com/${FOUNDRYUP_REPO}/releases/download/${FOUNDRYUP_TAG}/"
|
||||
BIN_ARCHIVE_URL="${RELEASE_URL}foundry_${FOUNDRYUP_VERSION}_${PLATFORM}_${ARCHITECTURE}.$EXT"
|
||||
MAN_TARBALL_URL="${RELEASE_URL}foundry_man_${FOUNDRYUP_VERSION}.tar.gz"
|
||||
|
||||
# Download and extract the binaries archive
|
||||
say "downloading latest forge, cast, anvil, and chisel"
|
||||
if [ "$PLATFORM" = "win32" ]; then
|
||||
tmp="$(mktemp -d 2>/dev/null || echo ".")/foundry.zip"
|
||||
ensure download "$BIN_ARCHIVE_URL" "$tmp"
|
||||
ensure unzip "$tmp" -d "$FOUNDRY_BIN_DIR"
|
||||
rm -f "$tmp"
|
||||
else
|
||||
ensure download "$BIN_ARCHIVE_URL" | ensure tar -xzC "$FOUNDRY_BIN_DIR"
|
||||
fi
|
||||
|
||||
# Optionally download the manuals
|
||||
if check_cmd tar; then
|
||||
say "downloading manpages"
|
||||
mkdir -p "$FOUNDRY_MAN_DIR"
|
||||
download "$MAN_TARBALL_URL" | tar -xzC "$FOUNDRY_MAN_DIR"
|
||||
else
|
||||
say 'skipping manpage download: missing "tar"'
|
||||
fi
|
||||
|
||||
for bin in "${BINS[@]}"; do
|
||||
bin_path="$FOUNDRY_BIN_DIR/$bin"
|
||||
|
||||
# Print installed msg
|
||||
say "installed - $(ensure "$bin_path" --version)"
|
||||
|
||||
# Check if the default path of the binary is not in FOUNDRY_BIN_DIR
|
||||
which_path="$(which "$bin")"
|
||||
if [ "$which_path" != "$bin_path" ]; then
|
||||
warn ""
|
||||
cat 1>&2 <<EOF
|
||||
There are multiple binaries with the name '$bin' present in your 'PATH'.
|
||||
This may be the result of installing '$bin' using another method,
|
||||
like Cargo or other package managers.
|
||||
You may need to run 'rm $which_path' or move '$FOUNDRY_BIN_DIR'
|
||||
in your 'PATH' to allow the newly installed version to take precedence!
|
||||
|
||||
EOF
|
||||
fi
|
||||
done
|
||||
|
||||
say "done!"
|
||||
|
||||
# Install by cloning the repo with the provided branch/tag
|
||||
else
|
||||
need_cmd cargo
|
||||
FOUNDRYUP_BRANCH=${FOUNDRYUP_BRANCH:-master}
|
||||
REPO_PATH="$FOUNDRY_DIR/$FOUNDRYUP_REPO"
|
||||
|
||||
# If repo path does not exist, grab the author from the repo, make a directory in .foundry, cd to it and clone.
|
||||
if [ ! -d "$REPO_PATH" ]; then
|
||||
AUTHOR="$(echo "$FOUNDRYUP_REPO" | cut -d'/' -f1 -)"
|
||||
ensure mkdir -p "$FOUNDRY_DIR/$AUTHOR"
|
||||
cd "$FOUNDRY_DIR/$AUTHOR"
|
||||
ensure git clone "https://github.com/$FOUNDRYUP_REPO"
|
||||
fi
|
||||
|
||||
# Force checkout, discarding any local changes
|
||||
cd "$REPO_PATH"
|
||||
ensure git fetch origin "${FOUNDRYUP_BRANCH}:remotes/origin/${FOUNDRYUP_BRANCH}"
|
||||
ensure git checkout "origin/${FOUNDRYUP_BRANCH}"
|
||||
|
||||
# If set, checkout specific commit from branch
|
||||
if [ -n "$FOUNDRYUP_COMMIT" ]; then
|
||||
say "installing at commit $FOUNDRYUP_COMMIT"
|
||||
ensure git checkout "$FOUNDRYUP_COMMIT"
|
||||
fi
|
||||
|
||||
# Build the repo and install the binaries locally to the .foundry bin directory.
|
||||
# --root appends /bin to the directory it is given, so we pass FOUNDRY_DIR.
|
||||
ensure cargo install --path ./cli --bins --locked --force --root "$FOUNDRY_DIR"
|
||||
# install anvil
|
||||
ensure cargo install --path ./anvil --bin anvil --locked --force --root "$FOUNDRY_DIR"
|
||||
# install chisel
|
||||
ensure cargo install --path ./chisel --bin chisel --locked --force --root "$FOUNDRY_DIR"
|
||||
|
||||
# If help2man is installed, use it to add Foundry man pages.
|
||||
if check_cmd help2man; then
|
||||
for bin in "${BINS[@]}"; do
|
||||
help2man -N "$FOUNDRY_BIN_DIR/$bin" > "$FOUNDRY_MAN_DIR/$bin.1"
|
||||
done
|
||||
fi
|
||||
|
||||
say "done"
|
||||
fi
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat 1>&2 <<EOF
|
||||
The installer for Foundry.
|
||||
|
||||
Update or revert to a specific Foundry version with ease.
|
||||
|
||||
USAGE:
|
||||
foundryup <OPTIONS>
|
||||
|
||||
OPTIONS:
|
||||
-h, --help Print help information
|
||||
-v, --version Install a specific version
|
||||
-b, --branch Install a specific branch
|
||||
-P, --pr Install a specific Pull Request
|
||||
-C, --commit Install a specific commit
|
||||
-r, --repo Install from a remote GitHub repo (uses default branch if no other options are set)
|
||||
-p, --path Install a local repository
|
||||
EOF
|
||||
}
|
||||
|
||||
say() {
|
||||
printf "foundryup: %s\n" "$1"
|
||||
}
|
||||
|
||||
warn() {
|
||||
say "warning: ${1}" >&2
|
||||
}
|
||||
|
||||
err() {
|
||||
say "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
need_cmd() {
|
||||
if ! check_cmd "$1"; then
|
||||
err "need '$1' (command not found)"
|
||||
fi
|
||||
}
|
||||
|
||||
check_cmd() {
|
||||
command -v "$1" &>/dev/null
|
||||
}
|
||||
|
||||
# Run a command that should never fail. If the command fails execution
|
||||
# will immediately terminate with an error showing the failing
|
||||
# command.
|
||||
ensure() {
|
||||
if ! "$@"; then err "command failed: $*"; fi
|
||||
}
|
||||
|
||||
# Downloads $1 into $2 or stdout
|
||||
download() {
|
||||
if [ "$2" ]; then
|
||||
# output into $2
|
||||
if check_cmd curl; then
|
||||
curl -#o "$2" -L "$1"
|
||||
else
|
||||
wget --show-progress -qO "$2" "$1"
|
||||
fi
|
||||
else
|
||||
# output to stdout
|
||||
if check_cmd curl; then
|
||||
curl -#L "$1"
|
||||
else
|
||||
wget --show-progress -qO- "$1"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Banner Function for Foundry
|
||||
banner() {
|
||||
printf '
|
||||
|
||||
.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx
|
||||
|
||||
╔═╗ ╔═╗ ╦ ╦ ╔╗╔ ╔╦╗ ╦═╗ ╦ ╦ Portable and modular toolkit
|
||||
╠╣ ║ ║ ║ ║ ║║║ ║║ ╠╦╝ ╚╦╝ for Ethereum Application Development
|
||||
╚ ╚═╝ ╚═╝ ╝╚╝ ═╩╝ ╩╚═ ╩ written in Rust.
|
||||
|
||||
.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx
|
||||
|
||||
Repo : https://github.com/foundry-rs/
|
||||
Book : https://book.getfoundry.sh/
|
||||
Chat : https://t.me/foundry_rs/
|
||||
Support : https://t.me/foundry_support/
|
||||
Contribute : https://github.com/orgs/foundry-rs/projects/2/
|
||||
|
||||
.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx.xOx
|
||||
|
||||
'
|
||||
}
|
||||
|
||||
|
||||
main "$@" || exit 1
|
||||
0
contracts-avax/tools/foundry/share/.gitkeep
Normal file
0
contracts-avax/tools/foundry/share/.gitkeep
Normal file
11
contracts-avax/tsconfig.json
Normal file
11
contracts-avax/tsconfig.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2020",
|
||||
"module": "commonjs",
|
||||
"esModuleInterop": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"strict": true,
|
||||
"skipLibCheck": true,
|
||||
"resolveJsonModule": true
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user