29 lines
1.0 KiB
Plaintext
29 lines
1.0 KiB
Plaintext
FOR $contract IN (select * from active_vm fetch out) {
|
|
LET $operator = (select * from $contract.out.operator);
|
|
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 = $price_per_minute;
|
|
IF $amount_due < $contract.locked_nano {
|
|
$amount_due = $contract.locked_nano;
|
|
};
|
|
LET $escrow_multiplier = 1;
|
|
IF $operator.escrow > 5000 {
|
|
$escrow_multiplier = 5;
|
|
};
|
|
IF $node_is_online {
|
|
UPDATE $contract.id SET locked_nano -= $amount_due;
|
|
UPDATE $operator.id SET locked_nano += $amount_due * $escrow_multiplier;
|
|
} ELSE {
|
|
LET $compensation = $amount_due * 5;
|
|
IF $compensation > $operator.escrow {
|
|
$compensation = $operator.escrow ;
|
|
};
|
|
UPDATE $operator.id SET escrow -= $compensation;
|
|
UPDATE $contract.in SET balance += $compensation;
|
|
};
|
|
IF $amount_due == $contract.locked_nano {
|
|
fn::delete_vm($contract.id);
|
|
};
|
|
};
|
|
|