Skip to content

A Foundry Library for compiling, debugging, and working with Dasy contracts in Solidity.

License

Notifications You must be signed in to change notification settings

dasylang/foundry-dasy

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Foundry x Dasy

License

A foundry library for working with dasy contracts. Take a look at z80's skunkworks to see an example project that uses this library.

Installing

First, install the dasy compiler by running:

pipx install dasy

Then, install this library with forge:

forge install dasylang/foundry-dasy

Usage

The HuffDeployer is a Solidity library that takes a filename and deploys the corresponding Huff contract, returning the address that the bytecode was deployed to. To use it, simply import it into your file by doing:

import {DasyDeployer} from "foundry-dasy/DasyDeployer.sol";

To compile contracts, you can use DasyDeployer.deploy(string fileName), which takes in a single string representing the filename's path relative to the src directory. Note that the file ending, i.e. .dasy, must be omitted. Here is an example deployment (where the contract is located in src/test/contracts/Number.dasy):

// SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.7.0 <0.9.0;

import {DasyDeployer} from "foundry-dasy/DasyDeployer";

interface Number {
  function setNumber(uint256) external;
  function getNumber() external returns (uint256);
}

contract DasyDeployerExample {
  function deploy() public {
    // Deploy a new instance of src/test/contracts/Number.dasy
    address addr = DasyDeployer.deploy("test/contracts/Number");

    // To call a function on the deployed contract, create an interface and wrap the address like so
    Number number = Number(addr);
  }
}

To deploy a Dasy contract with constructor arguments, you can chain commands onto the DasyDeployer.

For example, to deploy the contract src/test/contracts/Constructor.dasy with arguments (uint256(0x420), uint256(0x420)), you are encouraged to follow the logic defined in the deploy function of the DasyDeployerArguments contract below.

// SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.7.0 <0.9.0;

import {DasyDeployer} from "foundry-dasy/DasyDeployer";

interface Constructor {
  function getArgOne() external returns (address);
  function getArgTwo() external returns (uint256);
}

contract DasyDeployerArguments {
  function deploy() public {
    // Deploy the contract with arguments
    address addr = DasyDeployer
      .config()
      .with_args(bytes.concat(abi.encode(uint256(0x420)), abi.encode(uint256(0x420))))
      .deploy("test/contracts/Constructor");

    // To call a function on the deployed contract, create an interface and wrap the address
    Constructor construct = Constructor(addr);

    // Validate we deployed the Constructor with the correct arguments
    assert(construct.getArgOne() == address(0x420));
    assert(construct.getArgTwo() == uint256(0x420));
  }
}

About

A Foundry Library for compiling, debugging, and working with Dasy contracts in Solidity.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Solidity 96.5%
  • Shell 3.5%