[
"autonomous agent",
{
"doc_url": "https://rollercoaster.org/rollercoaster.json",
"init": "{
$decimals = 9;
$asset = var['asset'];
$network_fee = 1000;
}",
"messages": {
"cases": [
{
"if": "{ trigger.data.define AND !$asset }",
"messages": [
{
"app": "asset",
"payload": {
"is_private": false,
"is_transferrable": true,
"auto_destroy": false,
"fixed_denominations": false,
"issued_by_definer_only": true,
"cosigned_by_definer": false,
"spender_attested": false
}
},
{
"app": "state",
"state": "{
var['asset'] = response_unit;
response['asset'] = response_unit;
}"
}
]
},
{
"if": "{ $asset AND trigger.output[[asset=$asset]] > 0 }",
"init": "{
$asset_amount = trigger.output[[asset=$asset]];
$new_supply = var['supply'] - $asset_amount;
$s = $new_supply / 10^$decimals;
$r = sqrt($s) + 98.9099 * $s - 125.109 * $s^2 + 349.015 * $s^3 - 169.694 * $s^4 + 37.2253 * $s^5 - 4.25796 * $s^6 + 0.26503 * $s^7 - 0.008525 * $s^8 + 0.000111111 * $s^9;
$new_reserve = ceil($r * 1e9);
$bytes_amount = var['reserve'] - $new_reserve;
if ($bytes_amount < 0)
bounce("negative payout");
if ($bytes_amount == 0)
bounce("you would receive 0 bytes");
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "base",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{ $bytes_amount }"
}
]
}
},
{
"app": "state",
"state": "{
var['supply'] -= $asset_amount;
var['reserve'] -= $bytes_amount;
}"
}
]
},
{
"if": "{ $asset AND trigger.output[[asset=base]] >= 1e5 AND trigger.data.tokens }",
"init": "{
$asset_amount = trigger.data.tokens;
if (!is_integer($asset_amount) OR $asset_amount <= 0)
bounce("invalid number of tokens");
$bytes_amount = trigger.output[[asset=base]] - $network_fee; // subtract a fee to compensate for network fees
$new_supply = var['supply'] + $asset_amount;
$s = $new_supply / 10^$decimals;
$r = sqrt($s) + 98.9099 * $s - 125.109 * $s^2 + 349.015 * $s^3 - 169.694 * $s^4 + 37.2253 * $s^5 - 4.25796 * $s^6 + 0.26503 * $s^7 - 0.008525 * $s^8 + 0.000111111 * $s^9;
$new_reserve = ceil($r * 1e9);
$bytes_needed = $new_reserve - var['reserve'];
if ($bytes_needed != $bytes_amount)
bounce("expected " || ($bytes_needed + $network_fee) || " bytes, received " || ($bytes_amount + $network_fee));
}",
"messages": [
{
"app": "payment",
"payload": {
"asset": "{$asset}",
"outputs": [
{
"address": "{trigger.address}",
"amount": "{ $asset_amount }"
}
]
}
},
{
"app": "state",
"state": "{
var['supply'] += $asset_amount;
var['reserve'] += $bytes_amount;
}"
}
]
}
]
}
}
]