npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@bifproject/hardhat-bif-tool

v1.2.2

Published

Hardhat plugin to bif-chain tool

Downloads

458

Readme

hardhat-bif-box

Hardhat plugin to develop smart contracts and compile bif solidty contract.

What

The current add-on pack encompasses two fundamental features:

Integration of bif Chain Solidity Contract Compilation: This plugin incorporates the compilation capabilities of bif Chain's Solidity contracts, enabling users to effortlessly compile their contract code. Once installed, bif solidity contracts can be compiled by running the compile task. The existing solidity plugin functionality will no longer be available. plugin bindings for the bif Solidity compiler.

Deployment and Interaction with bif Chain Solidity Contracts: By integrating the Hardhat framework, this plugin facilitates the direct deployment of Solidity contracts onto the bif chain and offers comprehensive functionalities for contract transaction deployment, invocation, and querying. This significantly streamlines both the contract deployment process and subsequent operational tasks. This plugin adds support for bif solidity compiler to Hardhat.

Installation

First, you need to install the plugin by running

npm install @bifproject/hardhat-bif-tool

And add the following statement to your hardhat.config.js:

require("@bifproject/hardhat-bif-tool");

Or, if you are using TypeScript, add this to your hardhat.config.ts:

import "@bifproject/hardhat-bif-tool";

Required plugins

No plugins dependencies.

Tasks

This plugin creates no additional tasks.

Environment extensions

This plugins adds an bif object to the Hardhat Runtime Environment.

Provider extensions

The provider supplied by Hardhat will be extended using extendProvider, decorating it to be a HardhatBifProvider. Any successive calls to extendProvider will be added on top of this.

A HardhatBifProvider knows how to connect and interact with bif chain.

Helpers

These helpers are added to the bif object:

function getContractFactory(name: string, name: string, bytecodeOrFactoryOptions?: | (Signer | FactoryOptions) | BytesLike, signer?: Signer): Promise;

function getSigners() => Promise<Signer[]>;

function getSigner(address: string) => Promise;


## Configuration

For deploy and call contract, the only additional step to make this plugin work is to configure it properly through the Hardhat Config. For example, in your `hardhat.config.js`:

```js
module.exports = {
  networks: {
    "bifchain": {
      url: "http://test.bifcore.bitfactory.cn",
      bifNet: true,
      bifAccounts: [ "priSPKnVwNrzJ7KiWxddfUtap7f52B8pnLtoCu6wEW3MmpuKQd","priSPKoJ8vUfXk92axGtokCDiw8cM7KHznL6iugvNxeANctrdL" ]
    }
  },
};

This will make those three accounts available to the HardhatBifProvider.

For compile, this plugin adds an optional solidity entry to Hardhat's config, which lets you specify the solidity version to use.

This is an example of how to set it:

module.exports = {
  solidity: "0.8.21",
};

Usage

If you want to deploy and call contract, you could, for example in a task:

// Sample contract is used in the following tasks
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;

/**
 * @title TitleEscrow
 * @dev Title escrow contract for managing the beneficiaries and holders of a transferable record.
 */
contract test  {
  address private  registry;
  uint256 private val2;
    event Departure(
        address indexed user,  // 触发事件的用户地址
        string indexed entity, // 出发的实体(如车辆ID、航班号等)
        uint256 location,       // 出发地点
        uint256 timestamp       // 出发时间戳
    );
  constructor(address ad, uint256 val) payable {
    registry = ad;
    val2 = val;
  }

  function setaddress(address ad) public {
    registry = ad;
    emit Departure(msg.sender, "setaddress", val2, block.timestamp);
  }

  function getaddress() public returns(address) {
    return registry;
  }
}
//getSigners
task("getsigners", "Prints the list of accounts", async (taskArgs, hre) => {
  const accounts = await hre.bif.getSigners();

  for (const account of accounts) {
    console.log(account.address);
  }
});

//getSigner
task("getsigner", "Prints an account's key")
  .addParam("account", "The account's address")
  .setAction(async (taskArgs) => {
    const key = await hre.bif.getSigner(taskArgs.account);
    console.log(await key.getPrivateKey());
  });

//deploy contract
task("deploy", "deploy", async (taskArgs, hre) => {
  try {
    const factory = await hre.bif.getContractFactory("test");
    console.log(factory.bytecode);
    const contract = await factory.deploy(
      "did:bid:ef56JqCtiFNBU7z8Y8Nd47QsNPVNbTu3",
      10,
      { value: 10 },
    );
    const tx = contract.deployTransaction;
    console.log(`[Transaction] Pending ${tx.hash}`);

    const ct = await contract.deployed();
    if (ct !== null) console.log(`[Address] Deployed to ${contract.address}`);
  } catch (e) {
    console.log(e);
  }
});

//call
task("callStatic", "callStatic", async (taskArgs, hre) => {
  try {
    const factory = await hre.bif.getContractFactory("test");
    const contract = await factory.attach(
      "did:bid:efehs2xrzswELV2ZKJE3AMFd8g33i4Kt",
    );
    const val = await contract.callStatic["getaddress"]();

    console.log(`val = ${val}`);
  } catch (e) {
    console.log(e);
  }
});

//transaction
task("functions", "functions", async (taskArgs, hre) => {
  try {
    const factory = await hre.bif.getContractFactory("test");
    const contract = await factory.attach(
      "did:bid:ef249KNPXngaVydMUhPCggEx5s1X9DLYM",
    );
    const val = await contract.functions["setaddress"](
      "did:bid:efehs2xrzswELV2ZKJE3AMFd8g33i4Kt",
    );

    console.log(`val = ${JSON.stringify(val)}`);
  } catch (e) {
    console.log(e);
  }
});

//parselog
task("parselog", "parselog", async (taskArgs, hre) => {
  try {
    const factory = await hre.bif.getContractFactory("test");
    let log = {
      topics: [
        "0x1d4ee578ef4b9699acd9140a4bdceb9f5c765bf42c262b109e3d55dd9f3cdd1b",
        "0x000000000000000065660f132ff1eb3c4575312b3100a0db43990e73b83ccf28",
        "0xfe3200aef86ac4a9d022abb87c4f2d6e6a310331ae0e29729515dd6d9aa60077",
      ],
      data: "0x000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000625be8c2050e6",
    };
    const result = factory.interface.parseLog(log);

    console.log(`val = ${JSON.stringify(result)}`);
  } catch (e) {
    console.log(e);
  }
});

If you want to compile bif solidity contract, The following contract files can be used to test the usability of the BIF-Compiler. The procedure is the same as the original solidity contract compilation

Example:

pragma solidity ^0.8.20;

contract MyContract {
    address a = did:bid:efHQin9bi9s747KaePMdMFZ3mRVzV5a5; //for ed25519
    address b = did:bid:zfP8ckFNhiGmRvEXAsU6Eb57PEnAc45L; //for sm2
}