Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion contracts/beanstalk/init/deployment/InitProtocol.sol
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import {LibDiamond} from "contracts/libraries/LibDiamond.sol";
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
import {IDiamondCut} from "contracts/interfaces/IDiamondCut.sol";
import {IDiamondLoupe} from "contracts/interfaces/IDiamondLoupe.sol";
import {ShipmentPlanner} from "contracts/ecosystem/ShipmentPlanner.sol";
import {ShipmentPlanner} from "contracts/ecosystem/tractor/blueprints/ShipmentPlanner.sol";
import {LibGauge} from "contracts/libraries/LibGauge.sol";

/**
Expand Down
20 changes: 20 additions & 0 deletions contracts/ecosystem/tractor/ITractorDiamond.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface ITractorDiamond {
event TractorDataPublished(uint8 version, bytes data);
event MultiTractorDataPublished(uint8 version, bytes[] data);
/**
* @notice Publish Tractor data
* @param version The version of the Tractor data
* @param data The Tractor data
*/
function publishTractorData(uint8 version, bytes calldata data) external;

/**
* @notice Publish multiple Tractor data
* @param version The version of the Tractor data
* @param data The Tractor data array
*/
function publishMultiTractorData(uint8 version, bytes[] calldata data) external;
}
39 changes: 39 additions & 0 deletions contracts/ecosystem/tractor/InitializeTractorDiamond.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import {LibDiamond} from "contracts/libraries/LibDiamond.sol";
import {IDiamondCut} from "contracts/interfaces/IDiamondCut.sol";
import {ITractorDiamond} from "contracts/ecosystem/tractor/ITractorDiamond.sol";

/**
* @title InitializeTractorDiamond
* @notice Initialization contract for TractorDiamond, sets up Tractor-specific facets and selectors.
*/
contract InitializeTractorDiamond is ITractorDiamond {
// @notice Publish Tractor data
// @param version The version of the Tractor data
// @param data The Tractor data
function publishTractorData(uint8 version, bytes calldata data) external {
emit TractorDataPublished(version, data);
}

// @notice Publish multiple Tractor data
// @param version The version of the Tractor data
// @param data The Tractor data
function publishMultiTractorData(uint8 version, bytes[] calldata data) external {
emit MultiTractorDataPublished(version, data);
}

function addTractorDiamondImmutables() internal {
IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](1);
bytes4[] memory functionSelectors = new bytes4[](2);
functionSelectors[0] = ITractorDiamond.publishTractorData.selector;
functionSelectors[1] = ITractorDiamond.publishMultiTractorData.selector;
cut[0] = IDiamondCut.FacetCut({
facetAddress: address(this),
action: IDiamondCut.FacetCutAction.Add,
functionSelectors: functionSelectors
});
LibDiamond.diamondCut(cut, address(0), "");
}
}
17 changes: 17 additions & 0 deletions contracts/ecosystem/tractor/TractorDiamond.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import {Diamond} from "contracts/beanstalk/Diamond.sol";
import {InitializeTractorDiamond} from "contracts/ecosystem/tractor/InitializeTractorDiamond.sol";

/**
* @title TractorDiamond
* @notice TractorDiamond contract inheriting from Diamond
* @dev Adds an additional function to the Diamond that allows for compressed Tractor data be published in a gas efficent manner.
*/
contract TractorDiamond is InitializeTractorDiamond, Diamond {
constructor(address contractOwner) Diamond(contractOwner) {
// adds `publishTractorData` and `publishMultiTractorData` to the Diamond
addTractorDiamondImmutables();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import {LibTransfer} from "contracts/libraries/Token/LibTransfer.sol";
import {IBeanstalk} from "contracts/interfaces/IBeanstalk.sol";
import {TractorHelpers} from "./TractorHelpers.sol";
import {PerFunctionPausable} from "./PerFunctionPausable.sol";
import {BeanstalkPrice} from "./price/BeanstalkPrice.sol";
import {BeanstalkPrice} from "contracts/ecosystem/price/BeanstalkPrice.sol";
import {LibSiloHelpers} from "contracts/libraries/Silo/LibSiloHelpers.sol";
import {LibConvertData} from "contracts/libraries/Convert/LibConvertData.sol";
import {ReservesType} from "./price/WellPrice.sol";
import {Call, IWell, IERC20} from "../interfaces/basin/IWell.sol";
import {ReservesType} from "contracts/ecosystem/price/WellPrice.sol";
import {Call, IWell, IERC20} from "contracts/interfaces/basin/IWell.sol";
import {SiloHelpers} from "./SiloHelpers.sol";

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {IBeanstalk} from "contracts/interfaces/IBeanstalk.sol";
import {LibBytes} from "contracts/libraries/LibBytes.sol";
import {LibSiloHelpers} from "contracts/libraries/Silo/LibSiloHelpers.sol";
import {LibTransfer} from "contracts/libraries/Token/LibTransfer.sol";
import {Call, IWell, IERC20} from "../interfaces/basin/IWell.sol";
import {Call, IWell, IERC20} from "contracts/interfaces/basin/IWell.sol";
import {TractorHelpers} from "./TractorHelpers.sol";
import {IPriceManipulation} from "contracts/interfaces/IPriceManipulation.sol";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
pragma solidity ^0.8.20;

import {LibTransfer} from "contracts/libraries/Token/LibTransfer.sol";
import {Call, IWell, IERC20} from "../interfaces/basin/IWell.sol";
import {Call, IWell, IERC20} from "contracts/interfaces/basin/IWell.sol";
import {IBeanstalkWellFunction} from "contracts/interfaces/basin/IBeanstalkWellFunction.sol";
import {BeanstalkPrice, P} from "./price/BeanstalkPrice.sol";
import {ReservesType} from "./price/WellPrice.sol";
import {BeanstalkPrice, P} from "contracts/ecosystem/price/BeanstalkPrice.sol";
import {ReservesType} from "contracts/ecosystem/price/WellPrice.sol";
import {IBeanstalk} from "contracts/interfaces/IBeanstalk.sol";
import {Junction} from "./junction/Junction.sol";
import {IOperatorWhitelist} from "contracts/ecosystem/OperatorWhitelist.sol";
import {Junction} from "contracts/ecosystem/junction/Junction.sol";
import {IOperatorWhitelist} from "contracts/ecosystem/tractor/blueprints/OperatorWhitelist.sol";
import {LibSiloHelpers} from "contracts/libraries/Silo/LibSiloHelpers.sol";

/**
Expand Down
2 changes: 1 addition & 1 deletion contracts/interfaces/IShipmentPlanner.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

pragma solidity ^0.8.20;

import {ShipmentPlan} from "contracts/ecosystem/ShipmentPlanner.sol";
import {ShipmentPlan} from "contracts/ecosystem/tractor/blueprints/ShipmentPlanner.sol";

interface IShipmentPlanner {
function getFieldPlan(
Expand Down
2 changes: 1 addition & 1 deletion contracts/libraries/LibShipping.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ pragma solidity ^0.8.20;
import {AppStorage, LibAppStorage} from "contracts/libraries/LibAppStorage.sol";
import {LibReceiving} from "contracts/libraries/LibReceiving.sol";
import {ShipmentRecipient, ShipmentRoute} from "contracts/beanstalk/storage/System.sol";
import {ShipmentPlan} from "contracts/ecosystem/ShipmentPlanner.sol";
import {ShipmentPlan} from "contracts/ecosystem/tractor/blueprints/ShipmentPlanner.sol";

/**
* @title LibShipping
Expand Down
2 changes: 1 addition & 1 deletion contracts/libraries/Silo/LibTractorHelpers.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pragma solidity ^0.8.20;

import {IBeanstalk} from "contracts/interfaces/IBeanstalk.sol";
import {IOperatorWhitelist} from "contracts/ecosystem/OperatorWhitelist.sol";
import {IOperatorWhitelist} from "contracts/ecosystem/tractor/blueprints/OperatorWhitelist.sol";

/**
* @title LibTractorHelpers
Expand Down
2 changes: 1 addition & 1 deletion contracts/mocks/MockShipmentPlanner.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
pragma solidity ^0.8.20;

import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {ShipmentPlan, IBeanstalk} from "contracts/ecosystem/ShipmentPlanner.sol";
import {ShipmentPlan, IBeanstalk} from "contracts/ecosystem/tractor/blueprints/ShipmentPlanner.sol";

/**
* @title ShipmentPlanner
Expand Down
2 changes: 1 addition & 1 deletion test/foundry/VerifyDeployment.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {IWell, Call} from "contracts/interfaces/basin/IWell.sol";
import "forge-std/StdUtils.sol";
import {BeanstalkPrice, WellPrice} from "contracts/ecosystem/price/BeanstalkPrice.sol";
import {P} from "contracts/ecosystem/price/P.sol";
import {ShipmentPlanner} from "contracts/ecosystem/ShipmentPlanner.sol";
import {ShipmentPlanner} from "contracts/ecosystem/tractor/blueprints/ShipmentPlanner.sol";
import {ILiquidityWeightFacet} from "contracts/beanstalk/facets/sun/LiquidityWeightFacet.sol";

interface IBeanstalkPrice {
Expand Down
10 changes: 5 additions & 5 deletions test/foundry/ecosystem/ConvertUpBlueprint.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@ pragma abicoder v2;
import {TestHelper, LibTransfer, C, IMockFBeanstalk} from "test/foundry/utils/TestHelper.sol";
import {MockToken} from "contracts/mocks/MockToken.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {TractorHelpers} from "contracts/ecosystem/TractorHelpers.sol";
import {ConvertUpBlueprint} from "contracts/ecosystem/ConvertUpBlueprint.sol";
import {PriceManipulation} from "contracts/ecosystem/PriceManipulation.sol";
import {TractorHelpers} from "contracts/ecosystem/tractor/blueprints/TractorHelpers.sol";
import {ConvertUpBlueprint} from "contracts/ecosystem/tractor/blueprints/ConvertUpBlueprint.sol";
import {PriceManipulation} from "contracts/ecosystem/tractor/blueprints/PriceManipulation.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {TractorTestHelper} from "test/foundry/utils/TractorTestHelper.sol";
import {BeanstalkPrice, ReservesType} from "contracts/ecosystem/price/BeanstalkPrice.sol";
import {IBeanstalk} from "contracts/interfaces/IBeanstalk.sol";
import {OperatorWhitelist} from "contracts/ecosystem/OperatorWhitelist.sol";
import {OperatorWhitelist} from "contracts/ecosystem/tractor/blueprints/OperatorWhitelist.sol";
import {LibSiloHelpers} from "contracts/libraries/Silo/LibSiloHelpers.sol";
import {LibConvertData} from "contracts/libraries/Convert/LibConvertData.sol";
import {IWell} from "contracts/interfaces/basin/IWell.sol";
import "forge-std/console.sol";
import {SiloHelpers} from "contracts/ecosystem/SiloHelpers.sol";
import {SiloHelpers} from "contracts/ecosystem/tractor/blueprints/SiloHelpers.sol";

contract ConvertUpBlueprintTest is TractorTestHelper {
address[] farmers;
Expand Down
2 changes: 1 addition & 1 deletion test/foundry/ecosystem/OperatorWhitelist.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pragma solidity >=0.6.0 <0.9.0;
pragma abicoder v2;

import {TestHelper} from "test/foundry/utils/TestHelper.sol";
import {OperatorWhitelist} from "contracts/ecosystem/OperatorWhitelist.sol";
import {OperatorWhitelist} from "contracts/ecosystem/tractor/blueprints/OperatorWhitelist.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";

contract OperatorWhitelistTest is TestHelper {
Expand Down
10 changes: 5 additions & 5 deletions test/foundry/ecosystem/PerFunctionPausable.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ pragma abicoder v2;
import {TestHelper, LibTransfer, C, IMockFBeanstalk} from "test/foundry/utils/TestHelper.sol";
import {MockToken} from "contracts/mocks/MockToken.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {TractorHelpers} from "contracts/ecosystem/TractorHelpers.sol";
import {SowBlueprint} from "contracts/ecosystem/SowBlueprint.sol";
import {PriceManipulation} from "contracts/ecosystem/PriceManipulation.sol";
import {TractorHelpers} from "contracts/ecosystem/tractor/blueprints/TractorHelpers.sol";
import {SowBlueprint} from "contracts/ecosystem/tractor/blueprints/SowBlueprint.sol";
import {PriceManipulation} from "contracts/ecosystem/tractor/blueprints/PriceManipulation.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {TractorTestHelper} from "test/foundry/utils/TractorTestHelper.sol";
import {PerFunctionPausable} from "contracts/ecosystem/PerFunctionPausable.sol";
import {PerFunctionPausable} from "contracts/ecosystem/tractor/blueprints/PerFunctionPausable.sol";
import {BeanstalkPrice} from "contracts/ecosystem/price/BeanstalkPrice.sol";
import {SiloHelpers} from "contracts/ecosystem/SiloHelpers.sol";
import {SiloHelpers} from "contracts/ecosystem/tractor/blueprints/SiloHelpers.sol";

contract PerFunctionPausableTest is TractorTestHelper {
address[] farmers;
Expand Down
2 changes: 1 addition & 1 deletion test/foundry/ecosystem/PriceManipulation.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pragma abicoder v2;

import {IMockFBeanstalk} from "contracts/interfaces/IMockFBeanstalk.sol";
import {TestHelper} from "test/foundry/utils/TestHelper.sol";
import {PriceManipulation} from "contracts/ecosystem/PriceManipulation.sol";
import {PriceManipulation} from "contracts/ecosystem/tractor/blueprints/PriceManipulation.sol";
import {IWell} from "contracts/interfaces/basin/IWell.sol";
import {IBean} from "contracts/interfaces/IBean.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
Expand Down
10 changes: 5 additions & 5 deletions test/foundry/ecosystem/SowBlueprint.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ pragma abicoder v2;
import {TestHelper, LibTransfer, C, IMockFBeanstalk} from "test/foundry/utils/TestHelper.sol";
import {MockToken} from "contracts/mocks/MockToken.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {TractorHelpers} from "contracts/ecosystem/TractorHelpers.sol";
import {SowBlueprint} from "contracts/ecosystem/SowBlueprint.sol";
import {PriceManipulation} from "contracts/ecosystem/PriceManipulation.sol";
import {TractorHelpers} from "contracts/ecosystem/tractor/blueprints/TractorHelpers.sol";
import {SowBlueprint} from "contracts/ecosystem/tractor/blueprints/SowBlueprint.sol";
import {PriceManipulation} from "contracts/ecosystem/tractor/blueprints/PriceManipulation.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {TractorTestHelper} from "test/foundry/utils/TractorTestHelper.sol";
import {BeanstalkPrice} from "contracts/ecosystem/price/BeanstalkPrice.sol";
import {IBeanstalk} from "contracts/interfaces/IBeanstalk.sol";
import {OperatorWhitelist} from "contracts/ecosystem/OperatorWhitelist.sol";
import {SiloHelpers} from "contracts/ecosystem/SiloHelpers.sol";
import {OperatorWhitelist} from "contracts/ecosystem/tractor/blueprints/OperatorWhitelist.sol";
import {SiloHelpers} from "contracts/ecosystem/tractor/blueprints/SiloHelpers.sol";

contract SowBlueprintTest is TractorTestHelper {
address[] farmers;
Expand Down
8 changes: 4 additions & 4 deletions test/foundry/ecosystem/TractorHelpers.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import {LibChainlinkOracle} from "contracts/libraries/Oracle/LibChainlinkOracle.
import {IMockFBeanstalk} from "contracts/interfaces/IMockFBeanstalk.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {IWell, Call} from "contracts/interfaces/basin/IWell.sol";
import {TractorHelpers} from "contracts/ecosystem/TractorHelpers.sol";
import {TractorHelpers} from "contracts/ecosystem/tractor/blueprints/TractorHelpers.sol";
import {LibTractor} from "contracts/libraries/LibTractor.sol";
import {SiloHelpers} from "contracts/ecosystem/SiloHelpers.sol";
import {SiloHelpers} from "contracts/ecosystem/tractor/blueprints/SiloHelpers.sol";
import {LibSiloHelpers} from "contracts/libraries/Silo/LibSiloHelpers.sol";
import {AdvancedFarmCall} from "contracts/libraries/LibFarm.sol";
import {IBeanstalkWellFunction} from "contracts/interfaces/basin/IBeanstalkWellFunction.sol";
Expand All @@ -22,8 +22,8 @@ import {P} from "contracts/ecosystem/price/P.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol";
import {TractorTestHelper} from "test/foundry/utils/TractorTestHelper.sol";
import {SowBlueprint} from "contracts/ecosystem/SowBlueprint.sol";
import {PriceManipulation} from "contracts/ecosystem/PriceManipulation.sol";
import {SowBlueprint} from "contracts/ecosystem/tractor/blueprints/SowBlueprint.sol";
import {PriceManipulation} from "contracts/ecosystem/tractor/blueprints/PriceManipulation.sol";
import {LibSiloHelpers} from "contracts/libraries/Silo/LibSiloHelpers.sol";
import {console} from "forge-std/console.sol";

Expand Down
2 changes: 1 addition & 1 deletion test/foundry/sun/Gauge.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ pragma abicoder v2;
import {TestHelper, IMockFBeanstalk, MockToken, C, IWell} from "test/foundry/utils/TestHelper.sol";
import {MockChainlinkAggregator} from "contracts/mocks/MockChainlinkAggregator.sol";
import {MockLiquidityWeight} from "contracts/mocks/MockLiquidityWeight.sol";
import {GaugePriceThreshold} from "contracts/ecosystem/GaugePriceThreshold.sol";
import {GaugePriceThreshold} from "contracts/ecosystem/gaugePoints/GaugePriceThreshold.sol";

/**
* @notice Tests the functionality of the gauge.
Expand Down
2 changes: 1 addition & 1 deletion test/foundry/sun/Sun.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {IWell, IERC20, Call} from "contracts/interfaces/basin/IWell.sol";
import {LibWhitelistedTokens} from "contracts/libraries/Silo/LibWhitelistedTokens.sol";
import {LibWellMinting} from "contracts/libraries/Minting/LibWellMinting.sol";
import {Decimal} from "contracts/libraries/Decimal.sol";
import {ShipmentPlanner} from "contracts/ecosystem/ShipmentPlanner.sol";
import {ShipmentPlanner} from "contracts/ecosystem/tractor/blueprints/ShipmentPlanner.sol";
import {LibPRBMathRoundable} from "contracts/libraries/Math/LibPRBMathRoundable.sol";
import {PRBMath} from "@prb/math/contracts/PRBMath.sol";
import {LibEvaluate} from "contracts/libraries/LibEvaluate.sol";
Expand Down
2 changes: 1 addition & 1 deletion test/foundry/utils/ShipmentDeployer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {MockPayback} from "contracts/mocks/MockPayback.sol";
import {MockBudget} from "contracts/mocks/MockBudget.sol";
import {Utils, console} from "test/foundry/utils/Utils.sol";
import {C} from "contracts/C.sol";
import {ShipmentPlanner, ShipmentPlan} from "contracts/ecosystem/ShipmentPlanner.sol";
import {ShipmentPlanner, ShipmentPlan} from "contracts/ecosystem/tractor/blueprints/ShipmentPlanner.sol";
import {IShipmentPlanner} from "contracts/interfaces/IShipmentPlanner.sol";
import {MockShipmentPlanner} from "contracts/mocks/MockShipmentPlanner.sol";

Expand Down
6 changes: 3 additions & 3 deletions test/foundry/utils/TractorHelper.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ pragma solidity >=0.6.0 <0.9.0;
pragma abicoder v2;

import {TestHelper, LibTransfer, C, IMockFBeanstalk} from "test/foundry/utils/TestHelper.sol";
import {SowBlueprint} from "contracts/ecosystem/SowBlueprint.sol";
import {TractorHelpers} from "contracts/ecosystem/TractorHelpers.sol";
import {SowBlueprint} from "contracts/ecosystem/tractor/blueprints/SowBlueprint.sol";
import {TractorHelpers} from "contracts/ecosystem/tractor/blueprints/TractorHelpers.sol";
import {LibTractorHelpers} from "contracts/libraries/Silo/LibTractorHelpers.sol";
import {SiloHelpers} from "contracts/ecosystem/SiloHelpers.sol";
import {SiloHelpers} from "contracts/ecosystem/tractor/blueprints/SiloHelpers.sol";
import {LibSiloHelpers} from "contracts/libraries/Silo/LibSiloHelpers.sol";

contract TractorHelper is TestHelper {
Expand Down
6 changes: 3 additions & 3 deletions test/foundry/utils/TractorTestHelper.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ pragma solidity >=0.6.0 <0.9.0;
pragma abicoder v2;

import {TestHelper, LibTransfer, C, IMockFBeanstalk} from "test/foundry/utils/TestHelper.sol";
import {SowBlueprint} from "contracts/ecosystem/SowBlueprint.sol";
import {TractorHelpers} from "contracts/ecosystem/TractorHelpers.sol";
import {SowBlueprint} from "contracts/ecosystem/tractor/blueprints/SowBlueprint.sol";
import {TractorHelpers} from "contracts/ecosystem/tractor/blueprints/TractorHelpers.sol";
import {LibSiloHelpers} from "contracts/libraries/Silo/LibSiloHelpers.sol";
import {SiloHelpers} from "contracts/ecosystem/SiloHelpers.sol";
import {SiloHelpers} from "contracts/ecosystem/tractor/blueprints/SiloHelpers.sol";

contract TractorTestHelper is TestHelper {
// Add this at the top of the contract
Expand Down