IndustriLease
Lend HardwareBorrow Capacity
Developer Portal

DeveloperDocumentation

Integrate with the IndustriLease DePIN protocol. Explore contract ABIs, test endpoints, EIP-712 payload shapes, and local enclaves.

Deployed Sepolia Contracts

The protocol contracts deployed on Sepolia testnet. Make calls using Ethers.js or Viem.

MachineSlotToken.sol

Semi-fungible capacity token representing specific machine time windows (ERC-1155 derivative).

0x0165878A594ca255338adfa4d48449f69242Eb8F

IndustriLeaseEscrow.sol

Escrow clearinghouse that holds borrower payments and settles parametrically based on telemetry validation.

0xa513E6E4b8f2a923D98304ec87F64353C4D5C853
Contract ABI Explorer
mintSlot()method

Mints a new capacity slot. Only hardware owners or authorized AI agents can call this.

mintSlot(string machineId, uint256 startTime, uint256 endTime, uint256 pricePerHour, uint256 setupFee, uint256 totalLayers)
setAgentAuthorization()method

Grants or revokes authorization for an autonomous AI agent to manage time slot token listings.

setAgentAuthorization(address agent, bool authorized)
slots()method

Returns detailed configuration, time limits, fees, and status logs of a minted time slot.

slots(uint256 slotId) view returns (string machineId, uint256 startTime, uint256 endTime, uint256 pricePerHour, uint256 setupFee, uint256 totalLayers, address factory, uint8 status)

API Schemas & Webhooks

The platform exposes serverless routes and webhooks to synchronize off-chain telemetry enclaves with smart contract execution.

Retrieve capacity listings merged from Sepolia events and local database cache.

Query parameters

ParameterTypeDescription
categorystringFilter by machine type (e.g. '5-Axis CNC')
materialstringFilter by supported printing/milling materials
maxRatenumberMaximum hourly rate in USD
searchstringText search within machine title or description

Response shape (JSON)

{
  "success": true,
  "slots": [
    {
      "slotId": "42",
      "machineId": "m1-cnc",
      "startTime": 1791244800,
      "endTime": 1791252000,
      "pricePerHour": "145000000000000000000",
      "setupFee": "15000000000000000000",
      "totalLayers": 250,
      "status": "AVAILABLE",
      "factoryAddress": "0x4a2f8c1d3e9b7f5a2c6d8e1f3a4b5c6d7e8f9a0b"
    }
  ]
}

EIP-712 Telemetry Struct & Signature

To eliminate fake execution reporting, the hardware enclave emits cryptographically signed telemetry payloads verifying real execution metrics.

Solidity Struct Definition

struct TelemetryProof {
    uint256 slotId;
    string machineId;
    string jobId;
    uint256 layersCompleted;
    uint256 powerDrawAvg;
    string status; // "COMPLETED" | "FAILED"
}

Domain Hash

bytes32 public constant TELEMETRY_TYPEHASH = 
  keccak256("TelemetryProof(uint256 slotId,string machineId,string jobId,uint256 layersCompleted,uint256 powerDrawAvg,string status)");
signTelemetryPayload.ts
// Javascript/Typescript EIP-712 Signing Example via Viem
import { createWalletClient, http } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { sepolia } from 'viem/chains';

const account = privateKeyToAccount(process.env.TPM_ENCLAVE_KEY);
const client = createWalletClient({
  account,
  chain: sepolia,
  transport: http()
});

const domain = {
  name: 'IndustriLease',
  version: '1',
  chainId: 11155111, // Sepolia
  verifyingContract: '0xa513E6E4b8f2a923D98304ec87F64353C4D5C853'
};

const types = {
  TelemetryProof: [
    { name: 'slotId', type: 'uint256' },
    { name: 'machineId', type: 'string' },
    { name: 'jobId', type: 'string' },
    { name: 'layersCompleted', type: 'uint256' },
    { name: 'powerDrawAvg', type: 'uint256' },
    { name: 'status', type: 'string' }
  ]
};

const signature = await client.signTypedData({
  domain,
  types,
  primaryType: 'TelemetryProof',
  message: {
    slotId: 42n,
    machineId: 'm1-cnc',
    jobId: 'job-8921',
    layersCompleted: 250n,
    powerDrawAvg: 184n,
    status: 'COMPLETED'
  }
});

Local Development & Testing

Run the complete physical-to-digital loop locally on your machine for debugging.

1

Install Dependencies & Virtualenv

Setup the frontend node packages and Python virtual environments for the simulation scripts.

# Install UI components
npm install

# Setup simulator virtualenv
cd backend-python
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
2

Configure Local Environment

Create a `.env` configuration file in the project root folder.

# Root config (.env)
NEXT_PUBLIC_SLOT_TOKEN_ADDRESS=0x0165878A594ca255338adfa4d48449f69242Eb8F
NEXT_PUBLIC_ESCROW_ADDRESS=0xa513E6E4b8f2a923D98304ec87F64353C4D5C853
RPC_URL=http://localhost:8545
3

Run Node & Deploy Contracts

Spin up your local hardhat/anvil development node and run deployment scripts.

# Start local RPC network
npx hardhat node

# Deploy smart contracts locally
npx hardhat run scripts/deploy.js --network localhost
4

Start Simulation & Frontend

Execute the hardware simulation daemon and launch the Next.js development server.

# Execute physical simulator.py in backend-python folder
python simulator.py

# Launch local app server
npm run dev