Skip to main content

lotsClient

Initialize with initializeFromShyConfig — see the Web SDK overview for the common setup pattern.

Non-standard options for this client: { operatorMode: true } to enable operator settlement methods.

Example shyconfig​

{
"contract_version": "shylots-v1",
"app": {
"id": "shylots",
"name": "Shylots",
"product_type": "shylots",
"chain_id": "shyware-1"
},
"custody": {
"asset_id": "lot-unit",
"transfer_layer": "shywire",
"accepted_sku_whitelist": ["warehouse_lot"],
"unit_of_measure": "lot",
"evidence_requirements": ["camera_session_ref", "operator_receipt_ref"]
},
"wire": {
"asset_id": "usd-lot",
"provider": "custom",
"issuer_name": "Shylots Settlement",
"backing_asset": "USD",
"provider_config": {
"mode": "sandbox",
"intent_path": "/wire-provider",
"settlement_asset": "USD",
"supported_rails": ["blockchain", "ach"],
"requires_operator_review": true
},
"supported_networks": ["base-sepolia"]
},
"lots": {
"market_operator": "operator-west",
"sale_modes": ["sealed_bid"],
"open_mode": "operator_attested_close",
"bid_visibility": "sealed_until_close",
"reserve_funding_mode": "bid_bond_transfer",
"settlement_asset_id": "usd-lot"
}
}

Discover lots​

await client.listMarketplaceLots({
status: "open",
operatorId: "operator-west"
});
// → IntakeLot[] with Shylots settlement and visibility metadata attached

await client.getMarketplaceLot("lot-001");

The product client filters on top of shycustody lot records. It does not invent a second lot object type.

Bidder onboarding​

const account = await client.registerBidderAccount({
walletAddress: "0xabc..."
});

await client.getSettlementBalance(account.accountCommitment);

Bidder accounts are standard anonymous commitments. Funding, bid bonds, award settlement, and refunds all use the settlement asset declared in the wire and lots blocks.

Bid bond and settlement​

await client.transferBidBond({
senderCommitment: bidderCommitment,
recipientCommitment: escrowCommitment,
amount: 2500
});

await client.settleAwardTransfer({
senderCommitment: escrowCommitment,
recipientCommitment: sellerCommitment,
amount: 48000
});

Both methods default to lots.settlement_asset_id, so the product can stay asset-consistent without repeating the settlement asset at each call site.

Funding and payout intents​

await client.createFundingIntent({
amount: 50000,
destinationNetwork: "base-sepolia",
destinationAddress: "0xescrow..."
});

await client.createPayoutIntent({
amount: 47500,
accountCommitment: sellerCommitment,
payoutRail: "ach",
payoutDestination: "seller-bank-ref"
});

These are just shywire provider intents surfaced through the product client so the marketplace can support pre-funding and post-award payout flows.

Lot redemption​

await client.requestLotRedemption({
requestId: "redeem-001",
accountCommitment: winnerCommitment,
warehouseId: "wh-1",
skuClassId: "warehouse_lot",
siloAmount: 1,
requestedQuantity: 1,
destinationRef: "dock-3"
});

Redemption still lands on the custody layer. Shylots simply defaults the asset and wraps the call in a market-oriented surface.

Product boundary​

Shylots gives you the commercial base today:

  • private lot inventory
  • sealed-bid market posture in the manifest
  • bid-bond and settlement wiring
  • custody-backed redemption
  • evidence-aware lot discovery

If you later add timed opening, threshold reveal, or clearing-rule logic, that should layer on top of this family rather than pretend those semantics already exist.