brain/surql/timer.sql
Noor 479b9b6fa4 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 16:01:42 +00:00

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