Unit ID
4FgsiH0nJFnb+RcmtR73zXrn6s3Cky7qH9AtZmmtORU=
Received
29.03.2020 14:45:31
Confirmation delay (full node)
10 minutes 56 seconds
Confirmation delay (light node)
15 minutes 14 seconds
Messages
Definition
Definition: [ "autonomous agent", { "doc_url": "https://oswap-frontend.herokuapp.com/exchange.json", "init": "{ $asset = params.asset; $liquidity_asset = var['liquidity_asset']; $liquidity_supply = var['liquidity_supply']; $bytes_reserve = balance[base] - trigger.output[[asset=base]]; $asset_reserve = balance[$asset] - trigger.output[[asset=$asset]]; if (trigger.data.recipient AND !is_valid_address(trigger.data.recipient)) bounce('wrong recipient address'); $recipient = trigger.data.recipient OTHERWISE trigger.address; $min_bytes = trigger.data.min_bytes; $min_assets = trigger.data.min_assets; $deadline = trigger.data.deadline; }", "messages": { "cases": [ { "if": "{trigger.data.define AND !$liquidity_asset 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['liquidity_asset'] = response_unit; response['liquidity_asset'] = response_unit; }" } ] }, { "if": "{$liquidity_asset AND trigger.output[[asset=base]] > 1e4 AND trigger.output[[asset=$asset]] > 0}", "init": "{ if ($asset_reserve == 0 OR $bytes_reserve == 0) { $issue_amount = balance[base]; return; } $current_ratio = $asset_reserve / $bytes_reserve; $expected_asset_amount = round($current_ratio * trigger.output[[asset=base]]); if ($expected_asset_amount != trigger.output[[asset=$asset]]) bounce('wrong ratio of amounts, expected ' || $expected_asset_amount || ' of asset'); $investor_share = trigger.output[[asset=base]] / $bytes_reserve; $issue_amount = round($investor_share * $liquidity_supply); }", "messages": [ { "app": "payment", "payload": { "asset": "{$liquidity_asset}", "outputs": [ { "address": "{$recipient}", "amount": "{$issue_amount}" } ] } }, { "app": "state", "state": "{ var['liquidity_supply'] += $issue_amount; response['provider'] = trigger.address; response['byte_amount'] = trigger.output[[asset=base]]; response['asset_amount'] = trigger.output[[asset=$asset]]; response['liquidity_minted'] = $issue_amount; }" } ] }, { "if": "{$liquidity_asset AND trigger.output[[asset=$liquidity_asset]]}", "init": "{ $liquidity_asset_amount = trigger.output[[asset=$liquidity_asset]]; $investor_share = $liquidity_asset_amount / $liquidity_supply; $byte_amount = round($investor_share * balance[base]); $asset_amount = round($investor_share * balance[$asset]); }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$recipient}", "amount": "{$byte_amount}" } ] } }, { "app": "payment", "payload": { "asset": "{$asset}", "outputs": [ { "address": "{$recipient}", "amount": "{$asset_amount}" } ] } }, { "app": "state", "state": "{ var['liquidity_supply'] -= $liquidity_asset_amount; response['provider'] = trigger.address; response['byte_amount'] = $byte_amount; response['asset_amount'] = $asset_amount; }" } ] }, { "if": "{trigger.output[[asset=base]] > 1e4 AND trigger.output[[asset=$asset]] == 0 AND $liquidity_supply}", "init": "{ if ($deadline AND $deadline < timestamp) bounce('expired deadline'); $numerator = trigger.output[[asset=base]] * $asset_reserve * 997; $denominator = $bytes_reserve * 1000 + trigger.output[[asset=base]] * 997; $amount = round($numerator / $denominator); if ($min_assets AND $amount < $min_assets) bounce('slippage limit'); response['buyer'] = trigger.address; response['bytes_sold'] = trigger.output[[asset=base]]; response['assets_bought'] = $amount; }", "messages": [ { "app": "payment", "payload": { "asset": "{$asset}", "outputs": [ { "address": "{$recipient}", "amount": "{$amount}" } ] } } ] }, { "if": "{trigger.output[[asset=$asset]] > 0 AND $liquidity_supply}", "init": "{ if ($deadline AND $deadline < timestamp) bounce('expired deadline'); $numerator = trigger.output[[asset=$asset]] * $bytes_reserve * 997; $denominator = $asset_reserve * 1000 + trigger.output[[asset=$asset]] * 997; $amount = round($numerator / $denominator); if ($min_bytes AND $amount < $min_bytes) bounce('slippage limit'); response['buyer'] = trigger.address; response['assets_sold'] = trigger.output[[asset=$asset]]; response['bytes_bought'] = $amount; }", "messages": [ { "app": "payment", "payload": { "asset": "base", "outputs": [ { "address": "{$recipient}", "amount": "{$amount}" } ] } } ] } ] } } ]
Technical information
Fees:
4,254 bytes
(353 headers, 3901 payload)
Level:1287353
Witnessed level:1287346
Main chain index:1282191
Latest included mc index:1282189
Status:stable/confirmed/final