| 1 | [ |
| 2 | "autonomous agent", |
| 3 | { |
| 4 | "init": "{ |
| 5 | $oswap_base_aa = 'BVI5ZXW2Y5P2SN3SP3ZB7YDKY5NE2J2B'; |
| 6 | $usd_base_aa = 'AKMFBQ7ZM4NBT7AJO4FWXH4X6Y6EC422'; |
| 7 | |
| 8 | $checkDataFeed = ($oracle, $feedName) => { |
| 9 | $result = data_feed[[oracles=$oracle, feed_name=$feedName, ifnone=false]]; |
| 10 | require($result, 'data feed not found: oracle=' || $oracle || ', feed_name=' || $feedName); |
| 11 | }; |
| 12 | }", |
| 13 | "messages": { |
| 14 | "cases": [ |
| 15 | { |
| 16 | "init": "{ |
| 17 | $data = trigger.data; |
| 18 | require(exists($data.type), "type required"); |
| 19 | |
| 20 | $type = to_lower($data.type); |
| 21 | require($type == 'oswap' OR $type == 'usd', 'type is not supported: ' || $type); |
| 22 | |
| 23 | if ($type == 'oswap') { |
| 24 | $base_aa = $oswap_base_aa; |
| 25 | |
| 26 | $names = [ |
| 27 | 'oswap_aa', |
| 28 | 'x_oracle', |
| 29 | 'y_oracle', |
| 30 | 'x_feed_name', |
| 31 | 'y_feed_name', |
| 32 | ]; |
| 33 | |
| 34 | foreach($names, 5, $v => { |
| 35 | $value = $data[$v]; |
| 36 | require(exists($value), $v || ' required'); |
| 37 | |
| 38 | if ($v == 'oswap_aa') { |
| 39 | require(is_aa($value), 'invalid oswap_aa'); |
| 40 | } |
| 41 | }); |
| 42 | |
| 43 | $checkDataFeed($data.x_oracle, $data.x_feed_name); |
| 44 | $checkDataFeed($data.y_oracle, $data.y_feed_name); |
| 45 | |
| 46 | $params = { |
| 47 | oswap_aa: $data.oswap_aa, |
| 48 | x_oracle: $data.x_oracle, |
| 49 | y_oracle: $data.y_oracle, |
| 50 | x_feed_name: $data.x_feed_name, |
| 51 | y_feed_name: $data.y_feed_name, |
| 52 | x_decimals: $data.x_decimals OTHERWISE 0, |
| 53 | y_decimals: $data.y_decimals OTHERWISE 0, |
| 54 | }; |
| 55 | } |
| 56 | |
| 57 | if ($type == 'usd') { |
| 58 | $base_aa = $usd_base_aa; |
| 59 | |
| 60 | require(exists($data.oracle), 'oracle required'); |
| 61 | require(exists($data.feed_name), 'feed_name required'); |
| 62 | |
| 63 | $checkDataFeed($data.oracle, $data.feed_name); |
| 64 | |
| 65 | $params = { |
| 66 | oracle: $data.oracle, |
| 67 | feed_name: $data.feed_name, |
| 68 | }; |
| 69 | } |
| 70 | |
| 71 | $aa = [ |
| 72 | 'autonomous agent', |
| 73 | { |
| 74 | base_aa: $base_aa, |
| 75 | params: $params, |
| 76 | } |
| 77 | ]; |
| 78 | $aa_address = chash160($aa); |
| 79 | require(!definition[$aa_address], 'such an AA already exists: ' || $aa_address); |
| 80 | }", |
| 81 | "messages": [ |
| 82 | { |
| 83 | "app": "definition", |
| 84 | "payload": { |
| 85 | "definition": "{ $aa }" |
| 86 | } |
| 87 | }, |
| 88 | { |
| 89 | "app": "state", |
| 90 | "state": "{ |
| 91 | var['reserve_' || $type || '_' || $aa_address] = $params; |
| 92 | response['address'] = $aa_address; |
| 93 | }" |
| 94 | } |
| 95 | ] |
| 96 | } |
| 97 | ] |
| 98 | } |
| 99 | } |
| 100 | ] |