| 1 | [ |
| 2 | "autonomous agent", |
| 3 | { |
| 4 | "doc_url": "https://counterstake.org/bridge-export-factory.json", |
| 5 | "init": "{ |
| 6 | $export_base_aa = 'DAN6VZNKNZBKJP7GYJST5FMONZOY4FNT'; |
| 7 | $governance_base_aa = 'HLNWXGGHGXWMZN27W2722MNJCHH2IVAO'; |
| 8 | }", |
| 9 | "messages": { |
| 10 | "cases": [ |
| 11 | { |
| 12 | "init": "{ |
| 13 | if (!trigger.data.asset) |
| 14 | bounce("no asset"); |
| 15 | if (!asset[trigger.data.asset].exists) |
| 16 | bounce("no such asset: " || trigger.data.asset); |
| 17 | |
| 18 | if (!is_integer(trigger.data.asset_decimals) OR trigger.data.asset_decimals < 0 OR trigger.data.asset_decimals > 15) |
| 19 | bounce("bad asset_decimals" || trigger.data.asset_decimals); |
| 20 | |
| 21 | if (!trigger.data.foreign_network) |
| 22 | bounce("no foreign network"); |
| 23 | if (!trigger.data.foreign_asset) |
| 24 | bounce("no foreign asset"); |
| 25 | |
| 26 | |
| 27 | if (var['aa_' || trigger.data.foreign_network || '_' || trigger.data.foreign_asset]) |
| 28 | bounce('export AA already exists for this foreign network and asset'); |
| 29 | |
| 30 | $params = { |
| 31 | asset: trigger.data.asset, |
| 32 | asset_decimals: trigger.data.asset_decimals, |
| 33 | foreign_network: trigger.data.foreign_network, |
| 34 | foreign_asset: trigger.data.foreign_asset, |
| 35 | }; |
| 36 | |
| 37 | |
| 38 | if (trigger.data.ratio){ |
| 39 | if (typeof(trigger.data.ratio) != 'number' OR trigger.data.ratio <= 0) |
| 40 | bounce("bad ratio: " || trigger.data.ratio); |
| 41 | $params.ratio = trigger.data.ratio; |
| 42 | } |
| 43 | |
| 44 | |
| 45 | foreach(['challenging_periods', 'large_challenging_periods'], 2, $p => { |
| 46 | $value = trigger.data[$p]; |
| 47 | if (exists($value)) { |
| 48 | $params[$p] = $governance_base_aa.$get_challenging_periods($value); |
| 49 | } |
| 50 | }); |
| 51 | |
| 52 | |
| 53 | if (trigger.data.counterstake_coef){ |
| 54 | if (typeof(trigger.data.counterstake_coef) != 'number' OR trigger.data.counterstake_coef <= 1) |
| 55 | bounce("bad counterstake_coef: " || trigger.data.counterstake_coef); |
| 56 | $params.counterstake_coef = trigger.data.counterstake_coef; |
| 57 | } |
| 58 | |
| 59 | |
| 60 | if (trigger.data.min_stake){ |
| 61 | if (!is_integer(trigger.data.min_stake) OR trigger.data.min_stake < 0) |
| 62 | bounce("bad min_stake: " || trigger.data.min_stake); |
| 63 | $params.min_stake = trigger.data.min_stake; |
| 64 | } |
| 65 | |
| 66 | |
| 67 | if (trigger.data.min_tx_age){ |
| 68 | if (!is_integer(trigger.data.min_tx_age) OR trigger.data.min_tx_age < 0) |
| 69 | bounce("bad min_tx_age: " || trigger.data.min_tx_age); |
| 70 | $params.min_tx_age = trigger.data.min_tx_age; |
| 71 | } |
| 72 | |
| 73 | |
| 74 | if (trigger.data.large_threshold){ |
| 75 | if (!is_integer(trigger.data.large_threshold) OR trigger.data.large_threshold <= 0) |
| 76 | bounce("bad large_threshold: " || trigger.data.large_threshold); |
| 77 | $params.large_threshold = trigger.data.large_threshold; |
| 78 | } |
| 79 | |
| 80 | |
| 81 | foreach(['governance_challenging_period', 'freeze_period'], 2, $p => { |
| 82 | $value = trigger.data[$p]; |
| 83 | if (exists($value)) { |
| 84 | if (!is_integer($value) OR $value <= 0) |
| 85 | bounce("bad " || $p); |
| 86 | $params[$p] = $value; |
| 87 | } |
| 88 | }); |
| 89 | |
| 90 | $export_aa = [ |
| 91 | 'autonomous agent', |
| 92 | { |
| 93 | base_aa: $export_base_aa, |
| 94 | params: $params |
| 95 | } |
| 96 | ]; |
| 97 | $export_aa_address = chash160($export_aa); |
| 98 | }", |
| 99 | "messages": [ |
| 100 | { |
| 101 | "app": "payment", |
| 102 | "payload": { |
| 103 | "asset": "base", |
| 104 | "outputs": [ |
| 105 | { |
| 106 | "address": "{ $export_aa_address }", |
| 107 | "amount": 4000 |
| 108 | } |
| 109 | ] |
| 110 | } |
| 111 | }, |
| 112 | { |
| 113 | "app": "data", |
| 114 | "payload": { |
| 115 | "define": 1, |
| 116 | "factory": "{this_address}" |
| 117 | } |
| 118 | }, |
| 119 | { |
| 120 | "app": "definition", |
| 121 | "payload": { |
| 122 | "definition": "{$export_aa}" |
| 123 | } |
| 124 | }, |
| 125 | { |
| 126 | "app": "state", |
| 127 | "state": "{ |
| 128 | var['export_' || $export_aa_address] = $params; |
| 129 | var['aa_' || trigger.data.foreign_network || '_' || trigger.data.foreign_asset] = $export_aa_address; |
| 130 | response['address'] = $export_aa_address; |
| 131 | }" |
| 132 | } |
| 133 | ] |
| 134 | } |
| 135 | ] |
| 136 | } |
| 137 | } |
| 138 | ] |