Unlock the full potential of Hardhat with Sygma: the premier plugin for effortlessly deploying your Ethereum smart contracts across multiple blockchain networks. Leveraging the Sygma protocol, this tool revolutionizes your deployment process, making it efficient, streamlined, and truly multi-chain. With ChainSafe's plugin, you're not just deploying contracts—you're exploring new possibilities within the blockchain ecosystem.
To install, run:
npm install --save-dev @chainsafe/hardhat-plugin-multichain-deploy @buildwithsygma/sygma-sdk-core
For JavaScript users, add this line to your hardhat.config.js
:
require("@chainsafe/hardhat-plugin-multichain-deploy");
For TypeScript users, include it in your hardhat.config.ts
:
import "@chainsafe/hardhat-plugin-multichain-deploy";
The plugin adds a multichain
namespace to the Hardhat Runtime Environment (HRE), introducing new methods for deployment:
async deployMultichain<Abi extends ContractAbi = any>(
contractName: string,
networkArgs: NetworkArguments<Abi>,
options?: DeployOptions
): Promise<{
deploymentInfo: DeploymentInfo[];
receipt: Transaction;
} | void>
async deployMultichainBytecode<Abi extends ContractAbi = any>(
contractBytecode: string,
contractAbi: Abi,
networkArgs: NetworkArguments<Abi>,
options?: DeployOptions
): Promise<{
deploymentInfo: DeploymentInfo[];
receipt: Transaction;
} | void>
-
contractName
: Name of the contract for deployment. -
contractBytecode
: Compiled bytecode of the contract. -
contractAbi
: Contract ABI, detailing methods and structures for interaction. -
networkArgs
: Maps network identifiers to deployment arguments. Refer to NetworkArguments.md for more. -
options
: Optional deployment settings. Details in DeployOptions.md.
-
ADAPTER_ADDRESS
: Address of the adapter, facilitating deployment across chains with Sygma. Use this if deploying custom adapters.
To utilize the Multichain Deployment plugin, specific settings are required:
-
multichain
namespace: Configures deployment settings.-
environment
: Defines the Sygma environment. UseEnvironment
from@buildwithsygma/sygma-sdk-core
for constants.
-
import { Environment } from "@buildwithsygma/sygma-sdk-core";
const config: HardhatUserConfig = {
// Other configurations...
defaultNetwork: "goerli",
networks: {
sepolia: { ... },
goerli: { ... },
optimisticGoerli: { ... },
},
multichain: {
environment: Environment.TESTNET,
},
};
With the setup complete, let’s deploy an ERC20 contract across multiple chains:
const networkArgs = {
sepolia: {
args: [name, symbol, decimals],
},
goerli: {
args: [name, symbol, decimals],
},
};
const options = {
salt: "0xcafe00000000000000000000000000000000000000000000000000000000cafe",
};
this.hre.multichain.deployMultichain("MySuperToken", networkArgs, options);
To contribute to this project, please see the monorepo readme for guidelines.