Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion packages/contracts/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ PROD_AWS_ACCESS_KEY_ID=
PROD_AWS_SECRET_ACCESS_KEY=
# The following are only required if using Art Blocks Deployment Scripts
# Three Hasura environments: dev, staging, prod
# prod serves all mainnets (ethereum, base, arbitrum) distinguished by chain_id
# prod serves all mainnets (ethereum, base, arbitrum, shape) distinguished by chain_id
GRAPHQL_API_ENDPOINT_DEV=
HASURA_ADMIN_SECRET_DEV=
GRAPHQL_API_ENDPOINT_STAGING=
Expand All @@ -27,5 +27,7 @@ ARBITRUM_GOERLI_JSON_RPC_PROVIDER_URL=
# The following is only required if deploying on Base
BASESCAN_API_KEY=
BASE_MAINNET_JSON_RPC_PROVIDER_URL=
# The following is only required if deploying on Shape mainnet (chain ID 360)
SHAPE_MAINNET_JSON_RPC_PROVIDER_URL=
# The following is only required if deploying on Hoodi testnet
HOODI_JSON_RPC_PROVIDER_URL=
44 changes: 34 additions & 10 deletions packages/contracts/INFRASTRUCTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,30 @@ erDiagram
}
```

### Shape

```mermaid
---
title: Shape setup (mainnet, chain ID 360)
---
erDiagram
DeployerMultisig ||--|| EngineFactory : owns
EngineFactory ||--|| CoreRegistry : owns
EngineFactory ||--|| UniversalBytecodeStorageReader : initializes-cores-with
DeployerMultisig {
addr _TBD
}
EngineFactory {
addr _TBD
}
CoreRegistry {
addr _TBD
}
UniversalBytecodeStorageReader {
addr _TBD
}
```

### Sepolia (artist staging)

```mermaid
Expand Down Expand Up @@ -168,14 +192,14 @@ The following contracts were deployed by Art Blocks on various production networ

They are included here for reference purposes.

| Contract/Library (network:Contract) | Address |
| --------------------------------------- | -------------------------------------------- |
| mainnet:EngineFactory (v3.2.4, v3.2.5) | `0x00000000D0A0E78e243625Dbb4A5B37286Eac629` |
| arbitrum:EngineFactory (v3.2.4, v3.2.5) | `0x000000D60eeC180eDC00001173dE37ACd269b196` |
| base:EngineFactory (v3.2.4, v3.2.5) | `0x0000000005aBb84fF93f599a6309cA71a6DD4e4E` |
| Contract/Library (network:Contract) | Address |
| ---------------------------------------------- | -------------------------------------------- |
| mainnet:EngineFactory (v3.2.4, v3.2.5) | `0x00000000D0A0E78e243625Dbb4A5B37286Eac629` |
| arbitrum:EngineFactory (v3.2.4, v3.2.5) | `0x000000D60eeC180eDC00001173dE37ACd269b196` |
| base:EngineFactory (v3.2.4, v3.2.5) | `0x0000000005aBb84fF93f599a6309cA71a6DD4e4E` |
| sepolia-staging:EngineFactory (v3.2.4, v3.2.5) | `0x000000ab19F142143f03f96E2Bdf068474E50b7D` |
| sepolia-dev:EngineFactory (v3.2.4, v3.2.5) | `0x0000000765f79939e1Abb63C266cE983bd5eF5c0` |
| mainnet:EngineFactory (v3.2.2, v3.2.3) | `0x000000AB1a0786eE8c71516d9AbB8a36fbdDb7CB` |
| arbitrum:EngineFactory (v3.2.2, v3.2.3) | `0x000000da9D51CC51a50Dc296246075859b13ab0B` |
| mainnet:EngineFactory (v3.2.0, v3.2.1) | `0x00000000F82E4e6D5AB22D63050FCb2bF15eE95d` |
| arbitrum:EngineFactory (v3.2.0, v3.2.1) | `0x000000bbAA3E36b60C06A92430D8956459c2Fd51` |
| sepolia-dev:EngineFactory (v3.2.4, v3.2.5) | `0x0000000765f79939e1Abb63C266cE983bd5eF5c0` |
| mainnet:EngineFactory (v3.2.2, v3.2.3) | `0x000000AB1a0786eE8c71516d9AbB8a36fbdDb7CB` |
| arbitrum:EngineFactory (v3.2.2, v3.2.3) | `0x000000da9D51CC51a50Dc296246075859b13ab0B` |
| mainnet:EngineFactory (v3.2.0, v3.2.1) | `0x00000000F82E4e6D5AB22D63050FCb2bF15eE95d` |
| arbitrum:EngineFactory (v3.2.0, v3.2.1) | `0x000000bbAA3E36b60C06A92430D8956459c2Fd51` |
19 changes: 19 additions & 0 deletions packages/contracts/hardhat.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ const ARBITRUM_MAINNET_JSON_RPC_PROVIDER_URL =
const BASE_MAINNET_JSON_RPC_PROVIDER_URL =
process.env.BASE_MAINNET_JSON_RPC_PROVIDER_URL || "";

const SHAPE_MAINNET_JSON_RPC_PROVIDER_URL =
process.env.SHAPE_MAINNET_JSON_RPC_PROVIDER_URL || "";

const HOODI_JSON_RPC_PROVIDER_URL =
process.env.HOODI_JSON_RPC_PROVIDER_URL || "";

Expand Down Expand Up @@ -95,6 +98,14 @@ module.exports = {
gasMultiplier: 1.5,
maxNominalGasPriceGwei: 50,
},
shape: {
url: SHAPE_MAINNET_JSON_RPC_PROVIDER_URL,
accounts: [`${PRIVATE_KEY}`],
// ledgerAccounts: ["0x"],
gasPrice: "auto",
gasMultiplier: 1.5,
maxNominalGasPriceGwei: 50,
},
hoodi: {
url: HOODI_JSON_RPC_PROVIDER_URL,
accounts: [`${PRIVATE_KEY}`],
Expand Down Expand Up @@ -127,6 +138,14 @@ module.exports = {
browserURL: "https://hoodi.etherscan.io",
},
},
{
network: "shape",
chainId: 360,
urls: {
apiURL: "https://shapescan.xyz/api",
browserURL: "https://shapescan.xyz",
},
},
],
},
contractSizer: {
Expand Down
6 changes: 6 additions & 0 deletions packages/contracts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,29 +33,35 @@
"deploy:v3-engine:arbitrum:txbuilder": "yarn codegen && yarn require-low-gas arbitrum && NODE_ENV=prod EXPORT_TX_BUILDER=true yarn hardhat run --network arbitrum scripts/engine/V3/batch-create-engine-contracts.ts",
"deploy:v3-engine:base": "yarn codegen && yarn require-low-gas base && NODE_ENV=prod yarn hardhat run --network base scripts/engine/V3/batch-create-engine-contracts.ts",
"deploy:v3-engine:base:txbuilder": "yarn codegen && yarn require-low-gas base && NODE_ENV=prod EXPORT_TX_BUILDER=true yarn hardhat run --network base scripts/engine/V3/batch-create-engine-contracts.ts",
"deploy:v3-engine:shape": "yarn codegen && yarn require-low-gas shape && NODE_ENV=prod yarn hardhat run --network shape scripts/engine/V3/batch-create-engine-contracts.ts",
"deploy:v3-engine:shape:txbuilder": "yarn codegen && yarn require-low-gas shape && NODE_ENV=prod EXPORT_TX_BUILDER=true yarn hardhat run --network shape scripts/engine/V3/batch-create-engine-contracts.ts",
"post-deploy:v3-engine:dev": "yarn codegen && yarn require-low-gas sepolia && NODE_ENV=dev yarn hardhat run --network sepolia scripts/engine/V3/post-batch-create-engine-contracts.ts",
"post-deploy:v3-engine:staging": "yarn codegen && yarn require-low-gas sepolia && NODE_ENV=staging yarn hardhat run --network sepolia scripts/engine/V3/post-batch-create-engine-contracts.ts",
"post-deploy:v3-engine:mainnet": "yarn codegen && yarn require-low-gas mainnet && NODE_ENV=prod yarn hardhat run --network mainnet scripts/engine/V3/post-batch-create-engine-contracts.ts",
"post-deploy:v3-engine:arbitrum": "yarn codegen && yarn require-low-gas arbitrum && NODE_ENV=prod yarn hardhat run --network arbitrum scripts/engine/V3/post-batch-create-engine-contracts.ts",
"post-deploy:v3-engine:base": "yarn codegen && yarn require-low-gas base && NODE_ENV=prod yarn hardhat run --network base scripts/engine/V3/post-batch-create-engine-contracts.ts",
"post-deploy:v3-engine:shape": "yarn codegen && yarn require-low-gas shape && NODE_ENV=prod yarn hardhat run --network shape scripts/engine/V3/post-batch-create-engine-contracts.ts",
"deploy:shared-randomizer:goerli": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/randomizer-deployments/shared-randomizer-deployer.ts",
"deploy:shared-randomizer:dev-sepolia": "yarn require-low-gas sepolia && NODE_ENV=dev yarn hardhat run --network sepolia scripts/randomizer-deployments/shared-randomizer-deployer.ts",
"deploy:shared-randomizer:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/randomizer-deployments/shared-randomizer-deployer.ts",
"deploy:shared-randomizer:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/randomizer-deployments/shared-randomizer-deployer.ts",
"deploy:shared-randomizer:arbitrum": "yarn require-low-gas arbitrum && yarn hardhat run --network arbitrum scripts/randomizer-deployments/shared-randomizer-deployer.ts",
"deploy:shared-randomizer:base": "yarn require-low-gas base && yarn hardhat run --network base scripts/randomizer-deployments/shared-randomizer-deployer.ts",
"deploy:shared-randomizer:shape": "yarn require-low-gas shape && yarn hardhat run --network shape scripts/randomizer-deployments/shared-randomizer-deployer.ts",
"deploy:shared-minter-filter:goerli": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
"deploy:shared-minter-filter:dev-sepolia": "yarn require-low-gas sepolia && NODE_ENV=dev yarn hardhat run --network sepolia scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
"deploy:shared-minter-filter:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
"deploy:shared-minter-filter:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
"deploy:shared-minter-filter:arbitrum": "yarn require-low-gas arbitrum && yarn hardhat run --network arbitrum scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
"deploy:shared-minter-filter:base": "yarn require-low-gas base && yarn hardhat run --network base scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
"deploy:shared-minter-filter:shape": "yarn require-low-gas shape && yarn hardhat run --network shape scripts/minter-filter-deployments/shared-minter-filter-deployer.ts",
"deploy:shared-minters:goerli": "yarn require-low-gas goerli && yarn hardhat run --network goerli scripts/minter-deployments/shared-minters-deployer.ts",
"deploy:shared-minters:sepolia": "yarn require-low-gas sepolia && yarn hardhat run --network sepolia scripts/minter-deployments/shared-minters-deployer.ts",
"deploy:shared-minters:mainnet": "yarn require-low-gas mainnet && yarn hardhat run --network mainnet scripts/minter-deployments/shared-minters-deployer.ts",
"deploy:shared-minters:arbitrum-goerli": "yarn require-low-gas arbitrum-goerli && yarn hardhat run --network arbitrum-goerli scripts/minter-deployments/shared-minters-deployer.ts",
"deploy:shared-minters:arbitrum": "yarn require-low-gas arbitrum && yarn hardhat run --network arbitrum scripts/minter-deployments/shared-minters-deployer.ts",
"deploy:shared-minters:base": "yarn require-low-gas base && yarn hardhat run --network base scripts/minter-deployments/shared-minters-deployer.ts",
"deploy:shared-minters:shape": "yarn require-low-gas shape && yarn hardhat run --network shape scripts/minter-deployments/shared-minters-deployer.ts",
"deploy:splits-factory:dev": "yarn require-low-gas sepolia && NODE_ENV=dev yarn hardhat run --network sepolia scripts/splits/splits-factory-deployer.ts",
"deploy:splits-factory:staging": "yarn require-low-gas sepolia && NODE_ENV=staging yarn hardhat run --network sepolia scripts/splits/splits-factory-deployer.ts",
"deploy:splits-factory:mainnet": "yarn require-low-gas mainnet && NODE_ENV=prod yarn hardhat run --network mainnet scripts/splits/splits-factory-deployer.ts",
Expand Down
5 changes: 5 additions & 0 deletions packages/contracts/scripts/create2-deploy/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,11 @@ const CHAIN_CONFIG: Record<
network: "base",
explorer: "https://basescan.org",
},
360: {
name: "Shape",
network: "shape",
explorer: "https://shapescan.xyz",
},
11155111: {
name: "Sepolia",
network: "sepolia",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,12 @@ import { Logger } from "@ethersproject/logger";
Logger.setLogLevel(Logger.levels.ERROR);

// delay to avoid issues with reorgs and tx failures
import { delay, getAppPath, getNetworkName } from "../../../util/utils";
import {
delay,
getAppPath,
getNetworkName,
getBlockExplorerAddressUrl,
} from "../../../util/utils";
import {
getActiveCoreRegistry,
EXTRA_DELAY_BETWEEN_TX,
Expand Down Expand Up @@ -84,7 +89,6 @@ async function main() {
`deployments/engine/V3/studio/${config.environment}`
);
const outputSummaryFile = path.join(outputPath, "DEPLOYMENTS.md");
const etherscanSubdomain = networkName === "mainnet" ? "" : `${networkName}.`;
const outputMd = `
# Engine Factory Deployment

Expand All @@ -94,13 +98,13 @@ Date: ${new Date().toISOString()}

## **Environment:** ${config.environment}

**Engine Implementation:** https://${etherscanSubdomain}etherscan.io/address/${activeEngineImplementationAddress}#code
**Engine Implementation:** ${getBlockExplorerAddressUrl(networkName, activeEngineImplementationAddress)}

**Engine Flex Implementation:** https://${etherscanSubdomain}etherscan.io/address/${activeEngineFlexImplementationAddress}#code
**Engine Flex Implementation:** ${getBlockExplorerAddressUrl(networkName, activeEngineFlexImplementationAddress)}

**Engine Factory:** https://${etherscanSubdomain}etherscan.io/address/${engineFactoryAddress}#code
**Engine Factory:** ${getBlockExplorerAddressUrl(networkName, engineFactoryAddress)}

**Core Registry:** https://${etherscanSubdomain}etherscan.io/address/${coreRegistryAddress}#code
**Core Registry:** ${getBlockExplorerAddressUrl(networkName, coreRegistryAddress)}

Ownership on Core Registry transferred to the Engine Factory

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
getConfigInputs,
getNetworkName,
getChainId,
getBlockExplorerAddressUrl,
} from "../../util/utils";
import { EXTRA_DELAY_BETWEEN_TX } from "../../util/constants";
import { syncContractMetadataAfterDeploy } from "../../util/graphql-utils";
Expand Down Expand Up @@ -48,7 +49,6 @@ async function main() {
const networkName = await getNetworkName();
const chainId = await getChainId();
const outputSummaryFile = path.join(inputFileDirectory, "DEPLOYMENTS.md");
const etherscanSubdomain = networkName === "mainnet" ? "" : `${networkName}.`;

if (!deployNetworkConfiguration?.environment) {
throw new Error(
Expand Down Expand Up @@ -83,13 +83,13 @@ async function main() {

## **Environment:** ${deployNetworkConfiguration.environment}

**Engine Implementation:** https://${etherscanSubdomain}etherscan.io/address/${activeEngineImplementationAddress}#code
**Engine Implementation:** ${getBlockExplorerAddressUrl(networkName, activeEngineImplementationAddress)}

**Engine Flex Implementation:** https://${etherscanSubdomain}etherscan.io/address/${activeEngineFlexImplementationAddress}#code
**Engine Flex Implementation:** ${getBlockExplorerAddressUrl(networkName, activeEngineFlexImplementationAddress)}

**Engine Factory:** https://${etherscanSubdomain}etherscan.io/address/${engineFactoryAddress}#code
**Engine Factory:** ${getBlockExplorerAddressUrl(networkName, engineFactoryAddress)}

**Core Registry:** https://${etherscanSubdomain}etherscan.io/address/${coreRegistryAddress}#code
**Core Registry:** ${getBlockExplorerAddressUrl(networkName, coreRegistryAddress)}

---

Expand Down Expand Up @@ -224,7 +224,7 @@ async function main() {
outputMd += `
## Deployment: ${engineCoreContractType === 0 ? "Engine" : "Engine Flex"} | ${engineContractAddress}

**Engine Contract:** https://${etherscanSubdomain}etherscan.io/address/${engineContractAddress}#code
**Engine Contract:** ${getBlockExplorerAddressUrl(networkName, engineContractAddress)}

**Metadata**
- **Starting Project Id:** ${startingProjectId}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@ import { Logger } from "@ethersproject/logger";
Logger.setLogLevel(Logger.levels.ERROR);

// delay to avoid issues with reorgs and tx failures
import { delay, getConfigInputs, getNetworkName } from "../util/utils";
import {
delay,
getConfigInputs,
getNetworkName,
getBlockExplorerAddressUrl,
} from "../util/utils";
import {
DELEGATION_REGISTRY_V1_ADDRESSES,
EXTRA_DELAY_BETWEEN_TX,
Expand Down Expand Up @@ -181,8 +186,6 @@ async function main() {
//////////////////////////////////////////////////////////////////////////////

const outputSummaryFile = path.join(inputFileDirectory, "DEPLOYMENTS.md");
const etherscanSubdomain =
networkName === "mainnet" ? "" : `${networkName}.`;
const outputMd = `
# Shared Minter Deployment

Expand All @@ -196,7 +199,7 @@ Date: ${new Date().toISOString()}

**${
deployDetails.minterName
}:** https://${etherscanSubdomain}etherscan.io/address/${minterAddress}#code
}:** ${getBlockExplorerAddressUrl(networkName, minterAddress)}

**Associated Minter Filter:** ${deployDetails.minterFilterAddress}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@ import { Logger } from "@ethersproject/logger";
Logger.setLogLevel(Logger.levels.ERROR);

// delay to avoid issues with reorgs and tx failures
import { delay, getConfigInputs, getNetworkName } from "../util/utils";
import {
delay,
getConfigInputs,
getNetworkName,
getBlockExplorerAddressUrl,
} from "../util/utils";
import { EXTRA_DELAY_BETWEEN_TX } from "../util/constants";

/**
Expand Down Expand Up @@ -202,8 +207,6 @@ async function main() {
//////////////////////////////////////////////////////////////////////////////

const outputSummaryFile = path.join(inputFileDirectory, "DEPLOYMENTS.md");
const etherscanSubdomain =
networkName === "mainnet" ? "" : `${networkName}.`;
const outputMd = `
# Shared Minter Filter Deployment

Expand All @@ -217,7 +220,7 @@ Date: ${new Date().toISOString()}

**${
deployDetails.minterFilterName
}:** https://${etherscanSubdomain}etherscan.io/address/${minterFilterAddress}#code
}:** ${getBlockExplorerAddressUrl(networkName, minterFilterAddress)}

**Associated AdminACL contract:** ${adminACLContractAddress}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@ import { Logger } from "@ethersproject/logger";
Logger.setLogLevel(Logger.levels.ERROR);

// delay to avoid issues with reorgs and tx failures
import { delay, getConfigInputs, getNetworkName } from "../util/utils";
import {
delay,
getConfigInputs,
getNetworkName,
getBlockExplorerAddressUrl,
} from "../util/utils";
import { EXTRA_DELAY_BETWEEN_TX } from "../util/constants";

/**
Expand Down Expand Up @@ -155,8 +160,6 @@ async function main() {
//////////////////////////////////////////////////////////////////////////////

const outputSummaryFile = path.join(inputFileDirectory, "DEPLOYMENTS.md");
const etherscanSubdomain =
networkName === "mainnet" ? "" : `${networkName}.`;
const outputMd = `
# Shared Randomizer Deployment

Expand All @@ -170,7 +173,7 @@ Date: ${new Date().toISOString()}

**${
deployDetails.randomizerName
}:** https://${etherscanSubdomain}etherscan.io/address/${randomizerAddress}#code
}:** ${getBlockExplorerAddressUrl(networkName, randomizerAddress)}

**Associated pseudorandom atomic contract:** ${
deployDetails.pseudorandomAtomicContractAddress
Expand Down
2 changes: 1 addition & 1 deletion packages/contracts/scripts/util/aws_s3.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ const {

// Docs: https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-s3/index.html

const supportedNetworks = ["mainnet", "arbitrum", "sepolia", "base"];
const supportedNetworks = ["mainnet", "arbitrum", "sepolia", "base", "shape"];

const awsCreds = {
accessKeyId: process.env.PROD_AWS_ACCESS_KEY_ID,
Expand Down
Loading
Loading