DEV Community

Callis Ezenwaka
Callis Ezenwaka

Posted on • Edited on

Automating Blockchain Build and Integration with Node.js.

When implementing a blockchain solution using Node.js and Solidity, developers often need to copy the ABI code during deployment. This process often happens before commit to a remote repository.

In this article, we shall see a quick trick that achieves the same result without breaking a sweat. Before delving into the details, let's run a quick project setup with hardhat. For more info, see.

For a start, run the basic installation of hardhat npm install --save-dev hardhat if not previously done. Setup a new project with this command npx hardhat and follow the prompt.

The use-case for your blockchain application will differ from the one elaborate here. Be sure to run npm install <package name> to install packages that are peculiar to your use-case.

The project folder structure or tree should look like below image after setup:

Project Tree

Here, we can see all the directories especially the scripts and src/abi. Both directories will be handy in our implementations. Ensure that the file(s) for your solidity code are inside the contract folder.

Now, this is where the magic happens. Create a new script file files.ts inside the scripts directory and add the below code:

import fs from "fs";
import path from "path";

const folderList: string[] = [];
function output(folderPaths: string[]) {
  folderPaths.forEach(folderPath => {
    const results = fs.readdirSync(folderPath);
    const folders = results.filter((res: any) => fs.lstatSync(path.resolve(folderPath, res)).isDirectory());
    const innerFolderPaths = folders.map((folder: any) => path.resolve(folderPath, folder));
    if(innerFolderPaths.length === 0) {
      return;
    };
    innerFolderPaths.forEach((innerFolderPath: string) => {
      fs.readdirSync(innerFolderPath).forEach((file: string) => {
        if (file.split('.')[1] === 'json') {
          fs.rename(`${innerFolderPath}/${file}`, `./src/abi/${file}`, function (err: any) {
            if (err) {
              throw err;
            }
          })
        }
      });
      folderList.push(innerFolderPath)
    });
    output(innerFolderPaths);
  });
}

output([path.resolve(__dirname, "../artifacts/contracts")]);
Enter fullscreen mode Exit fullscreen mode

The above code uses recursion and fileSystem native API to loop through all the directories in a given directory, in this case ../artifacts/contracts. Then, open the package.json file and add the following piece of code inside the scripts object:

"files": "ts-node ./scripts/files.ts",
"compile": "npx hardhat compile && npm run files",
Enter fullscreen mode Exit fullscreen mode

What happens here is that once you run npm run compile command to compile your solidity smart contract, it will run the script ./scripts/files.ts. Afterward, it will copy the ABI codes for all the solidity code found inside the contract directory to the src/abi directory as shown below.

Abi folder tree

With this simple automation, there is no need to manually copy the ABIs compiled smart contracts to your project. The repository for this tutorial is on GitHub.

If you like the article, do like and share with friends.

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay