brain/surql/timer.sql
Noor cbd71b2308
Implement refund on delete app and vm
fix authentication and refund on delete vm
refactor app daemon register to get delete app req
db function for delete app
sample environment variable
extensive tests for delete app and vm
refactor test utilities
2025-06-04 21:04:32 +05:30

31 lines
1.2 KiB
SQL

FOR $contract IN (select * from active_vm fetch out) {
LET $operator = (select * from $contract.out.operator)[0];
LET $node_is_online = $contract.out.connected_at > $contract.out.disconnected_at;
LET $price_per_minute = fn::vm_price_per_minute($contract.id);
LET $amount_due = (time::now() - $contract.collected_at).mins() * $price_per_minute;
LET $amount_paid = IF $amount_due > $contract.locked_nano {
$contract.locked_nano
} ELSE {
$amount_due
};
LET $escrow_multiplier = IF $operator.escrow < 5_000_000_000_000 { 1 } ELSE { 5 };
IF $node_is_online {
UPDATE $operator.id SET balance += $amount_paid * $escrow_multiplier;
UPDATE $contract.id SET
locked_nano -= $amount_paid,
collected_at = time::now();
} ELSE {
LET $compensation = IF $amount_due > $operator.escrow {
$operator.escrow
} ELSE {
$amount_due
};
UPDATE $operator.id SET escrow -= $compensation;
UPDATE $contract.in SET balance += $compensation;
};
IF $amount_paid >= $contract.locked_nano {
fn::delete_vm($contract.id);
};
};
-- TODO: implement for active_app