AuSysFacet
🏠 Home > Smart Contracts/Overview > Facets > AuSysFacet
AuSysFacet.sol is Aurellion's logistics orchestration engine. It manages the complete lifecycle of physical delivery: order creation, journey definition, driver assignment, custody signature collection, settlement, and P2P offer management.
This facet mirrors the original AuSys.sol contract but operates within the shared Diamond storage.
Overview
| Property | Value |
|---|---|
| File | contracts/diamond/facets/AuSysFacet.sol |
| Inherits | ReentrancyGuard |
| Storage | Smart Contracts/Libraries/DiamondStorage — AuSys section |
| Roles | ADMIN_ROLE, DRIVER_ROLE, DISPATCHER_ROLE |
| Limits | MAX_ORDERS=10,000, MAX_JOURNEYS_PER_ORDER=10, MAX_NODES_PER_ORDER=20, MAX_DRIVER_JOURNEYS=10 |
RBAC
ADMIN_ROLE: Set admins, configure system
DRIVER_ROLE: Accept journeys, sign packages, complete deliveries
DISPATCHER_ROLE: Assign drivers to journeysRoles are stored as ausysRoles[role][address] in AppStorage.
Order Management
`createOrder(address token, uint256 tokenId, uint256 tokenQuantity, uint256 price, address[] nodes, ParcelData locationData, address seller) → bytes32 orderId`
Creates a logistics order with escrowed payment.
Process:
- Validates all addresses non-zero, amounts > 0
- Generates
orderId = keccak256(buyer, seller, block.timestamp, ...) - Calculates
txFee = (price * tokenQuantity * 2) / 100(2%) - Total escrow =
price * tokenQuantity + txFee - Transfers from buyer via
IERC20(payToken).safeTransferFrom - Stores
AuSysOrderin AppStorage - Emits
AuSysOrderCreated
Emits:
AuSysOrderCreated(orderId, buyer, seller, token, tokenId,
tokenQuantity, price, txFee, currentStatus, nodes)`cancelOrder(bytes32 orderId)`
Cancels an order in CREATED status. Refunds escrowed payment to buyer.
Reverts: If status is not CREATED, or caller is not buyer/admin.
Emits: FundsRefunded(buyer, amount)
Journey Management
`createJourney(bytes32 orderId, address sender, address receiver, uint256 bounty, uint256 ETA, ParcelData locationData) → bytes32 journeyId`
Creates a delivery leg for an order. Multiple journeys can exist per order (multi-hop delivery).
Limits: MAX_JOURNEYS_PER_ORDER = 10
Emits:
JourneyCreated(journeyId, sender, receiver, driver=address(0),
bounty, ETA, orderId, startLat, startLng, endLat, endLng, startName, endName)`assignDriverToJourney(bytes32 journeyId, address driver)`
Assigns a verified driver to a pending journey.
Modifiers: Caller must have DISPATCHER_ROLE
Validates: Driver must have DRIVER_ROLE, journey must be PENDING
Emits:
DriverAssigned(journeyId, driver, sender, receiver, bounty, ETA,
startLat, startLng, endLat, endLng, startName, endName)Custody Signatures (Package Handoff)
The three-signature system ensures cryptographic proof of custody transfer:
Signature Flow
Sender signs → Driver signs → Journey goes IN_TRANSIT
↓
Driver delivers
↓
Driver signs delivery → Journey DELIVERED
↓
Settlement triggered`packageSign(bytes32 journeyId)`
Called by sender, driver, or receiver to record their custody signature.
Logic:
- If
msg.sender == journey.sender: setscustomerHandOff[sender][journeyId] = true - If
msg.sender == journey.driver: setsdriverPickupSigned[driver][journeyId] = true - Emits
EmitSig(msg.sender, journeyId)
Transition to IN_TRANSIT: Once both sender and driver have signed:
- Journey status → IN_TRANSIT
- Tokens transferred into Diamond escrow via
IERC1155.safeTransferFrom - Emits
AuSysJourneyStatusUpdated(journeyId, status=IN_TRANSIT, ...)
`handOff(bytes32 journeyId)`
Called by driver to complete delivery and trigger payment.
Validates:
driverPickupSigned[driver][journeyId] == true- Journey status == IN_TRANSIT
Executes:
- Sets
driverDeliverySigned[driver][journeyId] = true - Journey status → DELIVERED
- Transfers bounty:
IERC20(payToken).safeTransfer(driver, journey.bounty) - Marks journey reward as paid:
journeyRewardPaid[journeyId] = true - If this is the final journey → triggers order settlement
Emits:
AuSysJourneyStatusUpdated(journeyId, status=DELIVERED, ...)Order Settlement
`settleOrder(bytes32 orderId)`
Called automatically when the final journey is delivered. Distributes payments.
Process:
- Validates:
currentStatus == PROCESSING, all journeys DELIVERED - Transfers ERC-1155 tokens from Diamond custody to buyer
- Pays seller:
price * quantityinpayToken - Distributes
txFeeproportionally across all nodes - Updates order status → SETTLED
- Emits
AuSysOrderSettled(orderId),SellerPaid(seller, amount),NodeFeeDistributed(node, amount)
P2P Trading
AuSysFacet supports direct peer-to-peer trades without the CLOB:
`createP2POffer(address token, uint256 tokenId, uint256 tokenQuantity, uint256 price, bool isSellerInitiated, address targetCounterparty, uint256 expiresAt) → bytes32 orderId`
Creates a directed offer between two parties.
- Seller-initiated: Seller offers tokens for a price. Buyer accepts and pays.
- Buyer-initiated: Buyer offers payment. Seller accepts and delivers tokens.
targetCounterparty == address(0)= open offer (anyone can accept)
Emits: P2POfferCreated(orderId, creator, isSellerInitiated, token, tokenId, tokenQuantity, price, targetCounterparty, expiresAt)
`acceptP2POffer(bytes32 orderId)`
Accepts a P2P offer as the counterparty.
Validates:
- Offer not expired (
expiresAt > block.timestamp) - If
targetCounterparty != address(0), caller must match - Appropriate tokens escrowed
Emits: P2POfferAccepted(orderId, acceptor, isSellerInitiated)
`cancelP2POffer(bytes32 orderId)`
Creator cancels an open offer and recovers escrowed tokens.
Emits: P2POfferCanceled(orderId, creator)
Events
| Event | Description |
|---|---|
AuSysOrderCreated |
New logistics order |
JourneyCreated |
New journey leg |
DriverAssigned |
Driver assigned to journey |
EmitSig |
Custody signature recorded |
AuSysJourneyStatusUpdated |
Journey status changed (full context) |
JourneyCanceled |
Journey cancelled with refund |
AuSysOrderStatusUpdated |
Order status changed |
AuSysOrderSettled |
Order fully settled |
FundsEscrowed |
Payment locked in contract |
FundsRefunded |
Payment returned to buyer |
SellerPaid |
Seller received payment |
NodeFeeDistributed |
Node received fee share |
P2POfferCreated |
New P2P offer |
P2POfferAccepted |
P2P offer accepted |
P2POfferCanceled |
P2P offer cancelled |
Errors
| Error | Condition |
|---|---|
NotJourneyParticipant() |
Caller not sender/driver/receiver |
JourneyNotInProgress() |
Journey not IN_TRANSIT for handoff |
JourneyNotPending() |
Journey not PENDING for assignment |
JourneyIncomplete() |
Not all journeys delivered at settlement |
AlreadySettled() |
Order already settled |
DriverNotSigned() |
Driver hasn't signed before handoff |
SenderNotSigned() |
Sender hasn't signed custody |
ReceiverNotSigned() |
Receiver signature missing |
InvalidAddress() |
Zero address passed |
InvalidAmount() |
Zero amount |
InvalidETA() |
ETA in the past |
QuantityExceedsRequested() |
Delivery exceeds order quantity |
InvalidNode() |
Node address not valid |
RewardAlreadyPaid() |
Bounty already distributed |
ArrayLimitExceeded() |
Too many journeys or nodes |
Status Enums
Order Status
| Value | Name | Meaning |
|---|---|---|
| 0 | CREATED | Order placed, escrowed, awaiting journeys |
| 1 | PROCESSING | At least one journey in progress |
| 2 | SETTLED | All journeys complete, funds distributed |
| 3 | CANCELLED | Order cancelled, funds refunded |
Journey Status
| Value | Name | Meaning |
|---|---|---|
| 0 | PENDING | Awaiting driver assignment and signatures |
| 1 | IN_TRANSIT | Both signatures collected, goods moving |
| 2 | DELIVERED | Driver has completed handoff |
| 3 | CANCELLED | Journey cancelled |