Adelante

what is adelante?

This is a code generation tool to aid in the rapid prototyping of smart contracts built with solidity

if you like it, send me a coffee ­čÖé

Eth address: 0x4A079D4417b522762C72dB9643234FCC4683a40E

how can I make it work??

run:

npm install adelante

or

yarn add adelante

then run:

npx adelante

you will be asked some questions to generate an adelante.json file

As of version 1.1.1 you can:

  • generate inline functions or extract them to their own files
  • generate inline components or extract them to their own files
  • use a combination of the two, e.g inline functions and extracted components (javascript support and other options coming soon!)

its reccomended that you

to install the dependencies

  • copy your abi file into the root project directory
  • define the path to your abi file in the adelante.json file (if you didnt do it when you generated the adelante file)
  • run npx adelante and it will output the files to a directory named after your contract name (more output options comming soon)

Currently it:

Creates functions to interact with smart contract functions

The functions will return data if it is expected, otherwise it will not generate a return statement.

import { getContract } from '../utils/utils';


export default async function getTotalUnits() {
  try {
    const { ethereum } = window;
    const contract = getContract(ethereum);
    const data = await contract.getTotalUnits();
    return data;
  }
  catch (error) {
    console.log(error);
  }
}

Creates React components for the functions

These components have inputs and a button to call the smart contract function along with state and a handleChange function

import React, { useState } from 'react';
import purchaseUnit from '../functions/purchaseUnit';

type State = {
  [key: string]: string
}


export default function PurchaseUnit() {
  const [state, setState] = useState<State>({})
  
  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    const { name, value } = event.target
    setState((prevState) => {
      return {
        ...prevState,
        [name]: value
      }
    })
  }

  return (
    <div id="functionBox">
      <div id="heading">
        <h1>purchaseUnit</h1>
        <p>Function inputs: (uint16 _amount: number)</p>
        
        <div id="inputs">
        <input name="_amount" onChange={handleChange} type="number" placeholder="_amount"/>
        </div>

      </div>
      <button onClick={async () => await purchaseUnit(state?._amount)} value="">purchaseUnit</button>
    </div>
  )
}
  • creates the index.ts, index.html & App files
  • populates the appfile with the components

import React from 'react';

import FundWithdraw from './components/fundWithdraw';
import GetInvestor from './components/getInvestor';
import GetRemainingUnits from './components/getRemainingUnits';
import GetTotalUnits from './components/getTotalUnits';
import PurchaseUnit from './components/purchaseUnit';


export default function App() {
  return (
    <div className="home-page">
      <FundWithdraw />
      <GetInvestor />
      <GetRemainingUnits />
      <GetTotalUnits />
      <PurchaseUnit />

    </div>
  )
}

Things to note:

  • with payable functions an ethers.utils.parseEther() is generated in the function file but an amount is not provided

how come? payable functions dont require the ether amount to de defined as an argument in the function inputs (these are recorded in the contract abi which is the source for the code generation)

GitHub

View Github