| 1 | [ |
| 2 | "autonomous agent", |
| 3 | { |
| 4 | "messages": { |
| 5 | "cases": [ |
| 6 | { |
| 7 | "messages": [ |
| 8 | { |
| 9 | "app": "payment", |
| 10 | "payload": { |
| 11 | "asset": "base", |
| 12 | "outputs": [ |
| 13 | { |
| 14 | "address": "{$addr}", |
| 15 | "amount": "{$to_send + $base_inp}" |
| 16 | } |
| 17 | ] |
| 18 | } |
| 19 | }, |
| 20 | { |
| 21 | "app": "payment", |
| 22 | "payload": { |
| 23 | "asset": "{$asset_ct}", |
| 24 | "outputs": [ |
| 25 | { |
| 26 | "address": "{$addr}", |
| 27 | "amount": "{$to_send}" |
| 28 | } |
| 29 | ] |
| 30 | }, |
| 31 | "if": "{!$asset}" |
| 32 | }, |
| 33 | { |
| 34 | "app": "state", |
| 35 | "state": "{var['price'] = false;response['message'] = 'exchanged ('||($asset ? 'assets': 'bytes')||') at '||$ratio||' bytes per token';}" |
| 36 | } |
| 37 | ], |
| 38 | "if": "{$addr != $addr_ct and $asset_ct}", |
| 39 | "init": "{if(!$ratio) bounce('Exchange already done');if(!$asset and var['wanted']) bounce('AA owner wants assets');if($asset and !var['wanted']) bounce('AA owner wants bytes');$available = $asset ? $balance : balance[$asset_ct];if($available <= 0) bounce('Not enough funds');$to_send = $asset ? ($asset_inp * $ratio) : (($base_inp - ($base_inp % $ratio)) / $ratio);if($available < $to_send) bounce('Not enough funds');}" |
| 40 | }, |
| 41 | { |
| 42 | "messages": [ |
| 43 | { |
| 44 | "app": "payment", |
| 45 | "payload": { |
| 46 | "asset": "{$asset_ct}", |
| 47 | "outputs": [ |
| 48 | { |
| 49 | "address": "{$addr}", |
| 50 | "amount": "{balance[$asset_ct]}" |
| 51 | } |
| 52 | ] |
| 53 | }, |
| 54 | "if": "{balance[$asset_ct] > 0}" |
| 55 | }, |
| 56 | { |
| 57 | "app": "payment", |
| 58 | "payload": { |
| 59 | "asset": "base", |
| 60 | "outputs": [ |
| 61 | { |
| 62 | "address": "{$addr}" |
| 63 | } |
| 64 | ] |
| 65 | } |
| 66 | }, |
| 67 | { |
| 68 | "app": "state", |
| 69 | "state": "{response['message'] = 'withdrawn all assets and/or bytes';}" |
| 70 | } |
| 71 | ], |
| 72 | "if": "{$addr == $addr_ct and trigger.data.withdraw}" |
| 73 | }, |
| 74 | { |
| 75 | "messages": [ |
| 76 | { |
| 77 | "app": "payment", |
| 78 | "payload": { |
| 79 | "asset": "{$asset}", |
| 80 | "outputs": [ |
| 81 | { |
| 82 | "address": "{$addr}", |
| 83 | "amount": "{$asset_inp}" |
| 84 | } |
| 85 | ] |
| 86 | }, |
| 87 | "if": "{$asset}" |
| 88 | }, |
| 89 | { |
| 90 | "app": "payment", |
| 91 | "payload": { |
| 92 | "asset": "base", |
| 93 | "outputs": [ |
| 94 | { |
| 95 | "address": "{$addr}", |
| 96 | "amount": "{$base_inp}" |
| 97 | } |
| 98 | ] |
| 99 | } |
| 100 | }, |
| 101 | { |
| 102 | "app": "state", |
| 103 | "state": "{var['price'] = trigger.data.price;if($asset or trigger.data.asset)var['asset'] = $asset otherwise trigger.data.asset;var['wanted'] = trigger.data.wanted ? true : false;response['message'] = 'exchange box configured!';}" |
| 104 | } |
| 105 | ], |
| 106 | "if": "{$addr == $addr_ct and trigger.data.configure}" |
| 107 | }, |
| 108 | { |
| 109 | "messages": [ |
| 110 | { |
| 111 | "app": "state", |
| 112 | "state": "{response['message'] = 'amount deposited correctly';}" |
| 113 | } |
| 114 | ], |
| 115 | "if": "{$addr == $addr_ct}" |
| 116 | } |
| 117 | ] |
| 118 | }, |
| 119 | "init": "{$addr_ct = 'JBGMJI7XSKLKNHZF26BUBWHVUZSDV3P5';$addr = trigger.address;$fee = 1000;if(var['asset']){$ratio = var['price'];$asset_ct = var['asset'];}else{if($addr != $addr_ct) bounce('Not configured yet');}if(trigger.output[[asset!=base]].asset != 'none')$asset = trigger.output[[asset!=base]].asset;if($asset){if($asset == 'ambiguous') bounce('Only 1 asset per tx');if($addr != $addr_ct and $asset != $asset_ct) bounce('Asset not allowed, please send ' || $asset_ct);$asset_inp = trigger.output[[asset!=base]];}$base_inp = trigger.output[[asset=base]] - $fee;$balance = balance[base] - $base_inp + $fee;}" |
| 120 | } |
| 121 | ] |