@playmint/hardhat-starknetjs
TypeScript icon, indicating that this package has built-in type declarations

1.0.3 • Public • Published

NPM Package

hardhat-starknetjs

Hardhat plugin for integration with StarkNet.js.

What

This plugin brings to Hardhat the StarkNet library StarkNet.js, which allows you to interact with StarkNet via javascript in a simple way.

NOTE: This plugin doesn't compile your StarkNet contracts or manage artifacts, it's intended to be used in conjunction with another plugin such as hardhat-starknet-compile.

Installation

npm install --save-dev @playmint/hardhat-starknetjs starknet

And add the following to your hardhat.config.ts:

import "@playmint/hardhat-starknetjs";

Or if you're using Javascript, add this to hardhat.config.js:

require("@playmint/hardhat-starknetjs");

Config extensions

This plugin adds a field starknetArtifacts to ProjectPathsConfig which contains the path to where the plugin should look for artifacts (compiled StarkNet contracts). This defaults to artifacts-starknet.

It also adds a starknetjs object to HardhatConfig which contains networks, a mapping of network name to network config (as defined by the constructor of StarkNet.js's Provider object). The default networks populated are goerli-alpha and mainnet-alpha, you can add any additional ones you need or change the default networks as you see fit.

const config: HardhatUserConfig = {
    paths: {
        starknetArtifacts: "artifacts-starknet"
    },
    starknetjs: {
        networks: {
            "goerli-alpha": { network: "goerli-alpha" },
            "mainnet-alpha": { network: "mainnet-alpha" },
            "devnet": { baseUrl: "http://localhost:5000" }
        }
    }
};

Selecting a network

You can select the network you want by either:

  • setting the environment variable STARKNETJS_NETWORK, or
  • using the --starknetjs-network argument when running a script or test, e.g. npx hardhat run scripts/deploy.ts --starknetjs-network devnet

Environment extensions

This plugin adds an object called starknetjs to the Hardhat Runtime Environment.

NetworkId

A networkId field is added to starknetjs which is a string, and contains the key of the selected network from hre.config.starknetjs.networks.

Provider object

A provider field is added to starknetjs, which is a StarkNet.js Provider automatically connected to the selected network.

Helpers

function getContractFactory(
    contractName: string,
    providerOrAccount?: Provider | Account | undefined,
    abi?: Abi | undefined): Promise<ContractFactory>;

function getContractFactoryFromArtifact(
    artifact: CompiledContract,
    providerOrAccount?: Provider | Account | undefined,
    abi?: Abi | undefined): ContractFactory;

function getContractAt(
    contractName: string,
    address: string,
    providerOrAccount?: Provider | Account | undefined,
    abi?: Abi | undefined): Promise<Contract>;

function getContractAtFromArtifact(
    artifact: CompiledContract,
    address: string,
    providerOrAccount?: Provider | Account | undefined,
    abi?: Abi | undefined): Contract;

function getAccount(
    address: string,
    keyPairOrSigner: KeyPair | SignerInterface,
    provider?: Provider): Account;

function readArtifact(searchPath: string): Promise<CompiledContract>;

Usage

Example deploy.ts:

import hre from "hardhat";


async function main() {
    // these paths will all resolve to the same artifact
    let factory = await hre.starknetjs.getContractFactory("test");
    factory = await hre.starknetjs.getContractFactory("artifacts-starknet/test");
    factory = await hre.starknetjs.getContractFactory("test.cairo");
    factory = await hre.starknetjs.getContractFactory("test.cairo/test.json");

    const instance = await factory.deploy();

    await instance.invoke_some_func(42);

    console.log(await instance.get_some_value());
}

main().catch(err => console.error(err));

Package Sidebar

Install

npm i @playmint/hardhat-starknetjs

Weekly Downloads

7

Version

1.0.3

License

CC0-1.0

Unpacked Size

38.8 kB

Total Files

13

Last publish

Collaborators

  • lewdhog
  • hypnoshock-playmint
  • chrisfarms
  • 5p0rt5beard