You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

578 lines
19 KiB

  1. -- +migrate Up
  2. -- History
  3. CREATE TABLE block (
  4. eth_block_num BIGINT PRIMARY KEY,
  5. timestamp TIMESTAMP WITHOUT TIME ZONE NOT NULL,
  6. hash BYTEA NOT NULL
  7. );
  8. CREATE TABLE coordinator (
  9. item_id SERIAL PRIMARY KEY,
  10. bidder_addr BYTEA NOT NULL,
  11. forger_addr BYTEA NOT NULL,
  12. eth_block_num BIGINT NOT NULL REFERENCES block (eth_block_num) ON DELETE CASCADE,
  13. url VARCHAR(200) NOT NULL
  14. );
  15. CREATE TABLE batch (
  16. item_id SERIAL PRIMARY KEY,
  17. batch_num BIGINT UNIQUE NOT NULL,
  18. eth_block_num BIGINT NOT NULL REFERENCES block (eth_block_num) ON DELETE CASCADE,
  19. forger_addr BYTEA NOT NULL, -- fake foreign key for coordinator
  20. fees_collected BYTEA NOT NULL,
  21. state_root BYTEA NOT NULL,
  22. num_accounts BIGINT NOT NULL,
  23. last_idx BIGINT NOT NULL,
  24. exit_root BYTEA NOT NULL,
  25. forge_l1_txs_num BIGINT,
  26. slot_num BIGINT NOT NULL,
  27. total_fees_usd NUMERIC
  28. );
  29. CREATE TABLE bid (
  30. slot_num BIGINT NOT NULL,
  31. bid_value BYTEA NOT NULL,
  32. eth_block_num BIGINT NOT NULL REFERENCES block (eth_block_num) ON DELETE CASCADE,
  33. bidder_addr BYTEA NOT NULL, -- fake foreign key for coordinator
  34. PRIMARY KEY (slot_num, bid_value)
  35. );
  36. CREATE TABLE token (
  37. item_id SERIAL PRIMARY KEY,
  38. token_id INT UNIQUE NOT NULL,
  39. eth_block_num BIGINT NOT NULL REFERENCES block (eth_block_num) ON DELETE CASCADE,
  40. eth_addr BYTEA UNIQUE NOT NULL,
  41. name VARCHAR(20) NOT NULL,
  42. symbol VARCHAR(10) NOT NULL,
  43. decimals INT NOT NULL,
  44. usd NUMERIC,
  45. usd_update TIMESTAMP WITHOUT TIME ZONE
  46. );
  47. -- +migrate StatementBegin
  48. CREATE FUNCTION hez_idx(BIGINT, VARCHAR)
  49. RETURNS VARCHAR
  50. AS
  51. $BODY$
  52. BEGIN
  53. IF $1 = 1 THEN
  54. RETURN 'hez:EXIT:1';
  55. END IF;
  56. RETURN 'hez:' || $2 || ':' || $1;
  57. END;
  58. $BODY$
  59. LANGUAGE plpgsql;
  60. -- +migrate StatementEnd
  61. CREATE TABLE account (
  62. idx BIGINT PRIMARY KEY,
  63. token_id INT NOT NULL REFERENCES token (token_id) ON DELETE CASCADE,
  64. batch_num BIGINT NOT NULL REFERENCES batch (batch_num) ON DELETE CASCADE,
  65. bjj BYTEA NOT NULL,
  66. eth_addr BYTEA NOT NULL
  67. );
  68. CREATE TABLE exit_tree (
  69. item_id SERIAL PRIMARY KEY,
  70. batch_num BIGINT REFERENCES batch (batch_num) ON DELETE CASCADE,
  71. account_idx BIGINT REFERENCES account (idx) ON DELETE CASCADE,
  72. merkle_proof BYTEA NOT NULL,
  73. balance BYTEA NOT NULL,
  74. instant_withdrawn BIGINT REFERENCES batch (batch_num) ON DELETE SET NULL,
  75. delayed_withdraw_request BIGINT REFERENCES batch (batch_num) ON DELETE SET NULL,
  76. delayed_withdrawn BIGINT REFERENCES batch (batch_num) ON DELETE SET NULL
  77. );
  78. -- +migrate StatementBegin
  79. CREATE FUNCTION set_token_usd_update()
  80. RETURNS TRIGGER
  81. AS
  82. $BODY$
  83. BEGIN
  84. IF NEW."usd" IS NOT NULL AND NEW."usd_update" IS NULL THEN
  85. NEW."usd_update" = timezone('utc', now());
  86. END IF;
  87. RETURN NEW;
  88. END;
  89. $BODY$
  90. LANGUAGE plpgsql;
  91. -- +migrate StatementEnd
  92. CREATE TRIGGER trigger_token_usd_update BEFORE UPDATE OR INSERT ON token
  93. FOR EACH ROW EXECUTE PROCEDURE set_token_usd_update();
  94. CREATE SEQUENCE tx_item_id;
  95. CREATE TABLE tx (
  96. -- Generic TX
  97. item_id INTEGER PRIMARY KEY DEFAULT nextval('tx_item_id'),
  98. is_l1 BOOLEAN NOT NULL,
  99. id BYTEA,
  100. type VARCHAR(40) NOT NULL,
  101. position INT NOT NULL,
  102. from_idx BIGINT,
  103. from_eth_addr BYTEA,
  104. from_bjj BYTEA,
  105. to_idx BIGINT NOT NULL,
  106. to_eth_addr BYTEA,
  107. to_bjj BYTEA,
  108. amount BYTEA NOT NULL,
  109. amount_f NUMERIC NOT NULL,
  110. token_id INT NOT NULL REFERENCES token (token_id),
  111. amount_usd NUMERIC, -- Value of the amount in USD at the moment the tx was inserted in the DB
  112. batch_num BIGINT REFERENCES batch (batch_num) ON DELETE SET NULL, -- Can be NULL in the case of L1 txs that are on the queue but not forged yet.
  113. eth_block_num BIGINT NOT NULL REFERENCES block (eth_block_num) ON DELETE CASCADE,
  114. -- L1
  115. to_forge_l1_txs_num BIGINT,
  116. user_origin BOOLEAN,
  117. load_amount BYTEA,
  118. load_amount_f NUMERIC,
  119. load_amount_usd NUMERIC,
  120. -- L2
  121. fee INT,
  122. fee_usd NUMERIC,
  123. nonce BIGINT
  124. );
  125. -- +migrate StatementBegin
  126. CREATE FUNCTION fee_percentage(NUMERIC)
  127. RETURNS NUMERIC
  128. AS
  129. $BODY$
  130. DECLARE perc NUMERIC;
  131. BEGIN
  132. SELECT CASE
  133. WHEN $1 = 0 THEN 0
  134. WHEN $1 = 1 THEN 3.162278e-24
  135. WHEN $1 = 2 THEN 1.000000e-23
  136. WHEN $1 = 3 THEN 3.162278e-23
  137. WHEN $1 = 4 THEN 1.000000e-22
  138. WHEN $1 = 5 THEN 3.162278e-22
  139. WHEN $1 = 6 THEN 1.000000e-21
  140. WHEN $1 = 7 THEN 3.162278e-21
  141. WHEN $1 = 8 THEN 1.000000e-20
  142. WHEN $1 = 9 THEN 3.162278e-20
  143. WHEN $1 = 10 THEN 1.000000e-19
  144. WHEN $1 = 11 THEN 3.162278e-19
  145. WHEN $1 = 12 THEN 1.000000e-18
  146. WHEN $1 = 13 THEN 3.162278e-18
  147. WHEN $1 = 14 THEN 1.000000e-17
  148. WHEN $1 = 15 THEN 3.162278e-17
  149. WHEN $1 = 16 THEN 1.000000e-16
  150. WHEN $1 = 17 THEN 3.162278e-16
  151. WHEN $1 = 18 THEN 1.000000e-15
  152. WHEN $1 = 19 THEN 3.162278e-15
  153. WHEN $1 = 20 THEN 1.000000e-14
  154. WHEN $1 = 21 THEN 3.162278e-14
  155. WHEN $1 = 22 THEN 1.000000e-13
  156. WHEN $1 = 23 THEN 3.162278e-13
  157. WHEN $1 = 24 THEN 1.000000e-12
  158. WHEN $1 = 25 THEN 3.162278e-12
  159. WHEN $1 = 26 THEN 1.000000e-11
  160. WHEN $1 = 27 THEN 3.162278e-11
  161. WHEN $1 = 28 THEN 1.000000e-10
  162. WHEN $1 = 29 THEN 3.162278e-10
  163. WHEN $1 = 30 THEN 1.000000e-09
  164. WHEN $1 = 31 THEN 3.162278e-09
  165. WHEN $1 = 32 THEN 1.000000e-08
  166. WHEN $1 = 33 THEN 1.100694e-08
  167. WHEN $1 = 34 THEN 1.211528e-08
  168. WHEN $1 = 35 THEN 1.333521e-08
  169. WHEN $1 = 36 THEN 1.467799e-08
  170. WHEN $1 = 37 THEN 1.615598e-08
  171. WHEN $1 = 38 THEN 1.778279e-08
  172. WHEN $1 = 39 THEN 1.957342e-08
  173. WHEN $1 = 40 THEN 2.154435e-08
  174. WHEN $1 = 41 THEN 2.371374e-08
  175. WHEN $1 = 42 THEN 2.610157e-08
  176. WHEN $1 = 43 THEN 2.872985e-08
  177. WHEN $1 = 44 THEN 3.162278e-08
  178. WHEN $1 = 45 THEN 3.480701e-08
  179. WHEN $1 = 46 THEN 3.831187e-08
  180. WHEN $1 = 47 THEN 4.216965e-08
  181. WHEN $1 = 48 THEN 4.641589e-08
  182. WHEN $1 = 49 THEN 5.108970e-08
  183. WHEN $1 = 50 THEN 5.623413e-08
  184. WHEN $1 = 51 THEN 6.189658e-08
  185. WHEN $1 = 52 THEN 6.812921e-08
  186. WHEN $1 = 53 THEN 7.498942e-08
  187. WHEN $1 = 54 THEN 8.254042e-08
  188. WHEN $1 = 55 THEN 9.085176e-08
  189. WHEN $1 = 56 THEN 1.000000e-07
  190. WHEN $1 = 57 THEN 1.100694e-07
  191. WHEN $1 = 58 THEN 1.211528e-07
  192. WHEN $1 = 59 THEN 1.333521e-07
  193. WHEN $1 = 60 THEN 1.467799e-07
  194. WHEN $1 = 61 THEN 1.615598e-07
  195. WHEN $1 = 62 THEN 1.778279e-07
  196. WHEN $1 = 63 THEN 1.957342e-07
  197. WHEN $1 = 64 THEN 2.154435e-07
  198. WHEN $1 = 65 THEN 2.371374e-07
  199. WHEN $1 = 66 THEN 2.610157e-07
  200. WHEN $1 = 67 THEN 2.872985e-07
  201. WHEN $1 = 68 THEN 3.162278e-07
  202. WHEN $1 = 69 THEN 3.480701e-07
  203. WHEN $1 = 70 THEN 3.831187e-07
  204. WHEN $1 = 71 THEN 4.216965e-07
  205. WHEN $1 = 72 THEN 4.641589e-07
  206. WHEN $1 = 73 THEN 5.108970e-07
  207. WHEN $1 = 74 THEN 5.623413e-07
  208. WHEN $1 = 75 THEN 6.189658e-07
  209. WHEN $1 = 76 THEN 6.812921e-07
  210. WHEN $1 = 77 THEN 7.498942e-07
  211. WHEN $1 = 78 THEN 8.254042e-07
  212. WHEN $1 = 79 THEN 9.085176e-07
  213. WHEN $1 = 80 THEN 1.000000e-06
  214. WHEN $1 = 81 THEN 1.100694e-06
  215. WHEN $1 = 82 THEN 1.211528e-06
  216. WHEN $1 = 83 THEN 1.333521e-06
  217. WHEN $1 = 84 THEN 1.467799e-06
  218. WHEN $1 = 85 THEN 1.615598e-06
  219. WHEN $1 = 86 THEN 1.778279e-06
  220. WHEN $1 = 87 THEN 1.957342e-06
  221. WHEN $1 = 88 THEN 2.154435e-06
  222. WHEN $1 = 89 THEN 2.371374e-06
  223. WHEN $1 = 90 THEN 2.610157e-06
  224. WHEN $1 = 91 THEN 2.872985e-06
  225. WHEN $1 = 92 THEN 3.162278e-06
  226. WHEN $1 = 93 THEN 3.480701e-06
  227. WHEN $1 = 94 THEN 3.831187e-06
  228. WHEN $1 = 95 THEN 4.216965e-06
  229. WHEN $1 = 96 THEN 4.641589e-06
  230. WHEN $1 = 97 THEN 5.108970e-06
  231. WHEN $1 = 98 THEN 5.623413e-06
  232. WHEN $1 = 99 THEN 6.189658e-06
  233. WHEN $1 = 100 THEN 6.812921e-06
  234. WHEN $1 = 101 THEN 7.498942e-06
  235. WHEN $1 = 102 THEN 8.254042e-06
  236. WHEN $1 = 103 THEN 9.085176e-06
  237. WHEN $1 = 104 THEN 1.000000e-05
  238. WHEN $1 = 105 THEN 1.100694e-05
  239. WHEN $1 = 106 THEN 1.211528e-05
  240. WHEN $1 = 107 THEN 1.333521e-05
  241. WHEN $1 = 108 THEN 1.467799e-05
  242. WHEN $1 = 109 THEN 1.615598e-05
  243. WHEN $1 = 110 THEN 1.778279e-05
  244. WHEN $1 = 111 THEN 1.957342e-05
  245. WHEN $1 = 112 THEN 2.154435e-05
  246. WHEN $1 = 113 THEN 2.371374e-05
  247. WHEN $1 = 114 THEN 2.610157e-05
  248. WHEN $1 = 115 THEN 2.872985e-05
  249. WHEN $1 = 116 THEN 3.162278e-05
  250. WHEN $1 = 117 THEN 3.480701e-05
  251. WHEN $1 = 118 THEN 3.831187e-05
  252. WHEN $1 = 119 THEN 4.216965e-05
  253. WHEN $1 = 120 THEN 4.641589e-05
  254. WHEN $1 = 121 THEN 5.108970e-05
  255. WHEN $1 = 122 THEN 5.623413e-05
  256. WHEN $1 = 123 THEN 6.189658e-05
  257. WHEN $1 = 124 THEN 6.812921e-05
  258. WHEN $1 = 125 THEN 7.498942e-05
  259. WHEN $1 = 126 THEN 8.254042e-05
  260. WHEN $1 = 127 THEN 9.085176e-05
  261. WHEN $1 = 128 THEN 1.000000e-04
  262. WHEN $1 = 129 THEN 1.100694e-04
  263. WHEN $1 = 130 THEN 1.211528e-04
  264. WHEN $1 = 131 THEN 1.333521e-04
  265. WHEN $1 = 132 THEN 1.467799e-04
  266. WHEN $1 = 133 THEN 1.615598e-04
  267. WHEN $1 = 134 THEN 1.778279e-04
  268. WHEN $1 = 135 THEN 1.957342e-04
  269. WHEN $1 = 136 THEN 2.154435e-04
  270. WHEN $1 = 137 THEN 2.371374e-04
  271. WHEN $1 = 138 THEN 2.610157e-04
  272. WHEN $1 = 139 THEN 2.872985e-04
  273. WHEN $1 = 140 THEN 3.162278e-04
  274. WHEN $1 = 141 THEN 3.480701e-04
  275. WHEN $1 = 142 THEN 3.831187e-04
  276. WHEN $1 = 143 THEN 4.216965e-04
  277. WHEN $1 = 144 THEN 4.641589e-04
  278. WHEN $1 = 145 THEN 5.108970e-04
  279. WHEN $1 = 146 THEN 5.623413e-04
  280. WHEN $1 = 147 THEN 6.189658e-04
  281. WHEN $1 = 148 THEN 6.812921e-04
  282. WHEN $1 = 149 THEN 7.498942e-04
  283. WHEN $1 = 150 THEN 8.254042e-04
  284. WHEN $1 = 151 THEN 9.085176e-04
  285. WHEN $1 = 152 THEN 1.000000e-03
  286. WHEN $1 = 153 THEN 1.100694e-03
  287. WHEN $1 = 154 THEN 1.211528e-03
  288. WHEN $1 = 155 THEN 1.333521e-03
  289. WHEN $1 = 156 THEN 1.467799e-03
  290. WHEN $1 = 157 THEN 1.615598e-03
  291. WHEN $1 = 158 THEN 1.778279e-03
  292. WHEN $1 = 159 THEN 1.957342e-03
  293. WHEN $1 = 160 THEN 2.154435e-03
  294. WHEN $1 = 161 THEN 2.371374e-03
  295. WHEN $1 = 162 THEN 2.610157e-03
  296. WHEN $1 = 163 THEN 2.872985e-03
  297. WHEN $1 = 164 THEN 3.162278e-03
  298. WHEN $1 = 165 THEN 3.480701e-03
  299. WHEN $1 = 166 THEN 3.831187e-03
  300. WHEN $1 = 167 THEN 4.216965e-03
  301. WHEN $1 = 168 THEN 4.641589e-03
  302. WHEN $1 = 169 THEN 5.108970e-03
  303. WHEN $1 = 170 THEN 5.623413e-03
  304. WHEN $1 = 171 THEN 6.189658e-03
  305. WHEN $1 = 172 THEN 6.812921e-03
  306. WHEN $1 = 173 THEN 7.498942e-03
  307. WHEN $1 = 174 THEN 8.254042e-03
  308. WHEN $1 = 175 THEN 9.085176e-03
  309. WHEN $1 = 176 THEN 1.000000e-02
  310. WHEN $1 = 177 THEN 1.100694e-02
  311. WHEN $1 = 178 THEN 1.211528e-02
  312. WHEN $1 = 179 THEN 1.333521e-02
  313. WHEN $1 = 180 THEN 1.467799e-02
  314. WHEN $1 = 181 THEN 1.615598e-02
  315. WHEN $1 = 182 THEN 1.778279e-02
  316. WHEN $1 = 183 THEN 1.957342e-02
  317. WHEN $1 = 184 THEN 2.154435e-02
  318. WHEN $1 = 185 THEN 2.371374e-02
  319. WHEN $1 = 186 THEN 2.610157e-02
  320. WHEN $1 = 187 THEN 2.872985e-02
  321. WHEN $1 = 188 THEN 3.162278e-02
  322. WHEN $1 = 189 THEN 3.480701e-02
  323. WHEN $1 = 190 THEN 3.831187e-02
  324. WHEN $1 = 191 THEN 4.216965e-02
  325. WHEN $1 = 192 THEN 4.641589e-02
  326. WHEN $1 = 193 THEN 5.108970e-02
  327. WHEN $1 = 194 THEN 5.623413e-02
  328. WHEN $1 = 195 THEN 6.189658e-02
  329. WHEN $1 = 196 THEN 6.812921e-02
  330. WHEN $1 = 197 THEN 7.498942e-02
  331. WHEN $1 = 198 THEN 8.254042e-02
  332. WHEN $1 = 199 THEN 9.085176e-02
  333. WHEN $1 = 200 THEN 1.000000e-01
  334. WHEN $1 = 201 THEN 1.100694e-01
  335. WHEN $1 = 202 THEN 1.211528e-01
  336. WHEN $1 = 203 THEN 1.333521e-01
  337. WHEN $1 = 204 THEN 1.467799e-01
  338. WHEN $1 = 205 THEN 1.615598e-01
  339. WHEN $1 = 206 THEN 1.778279e-01
  340. WHEN $1 = 207 THEN 1.957342e-01
  341. WHEN $1 = 208 THEN 2.154435e-01
  342. WHEN $1 = 209 THEN 2.371374e-01
  343. WHEN $1 = 210 THEN 2.610157e-01
  344. WHEN $1 = 211 THEN 2.872985e-01
  345. WHEN $1 = 212 THEN 3.162278e-01
  346. WHEN $1 = 213 THEN 3.480701e-01
  347. WHEN $1 = 214 THEN 3.831187e-01
  348. WHEN $1 = 215 THEN 4.216965e-01
  349. WHEN $1 = 216 THEN 4.641589e-01
  350. WHEN $1 = 217 THEN 5.108970e-01
  351. WHEN $1 = 218 THEN 5.623413e-01
  352. WHEN $1 = 219 THEN 6.189658e-01
  353. WHEN $1 = 220 THEN 6.812921e-01
  354. WHEN $1 = 221 THEN 7.498942e-01
  355. WHEN $1 = 222 THEN 8.254042e-01
  356. WHEN $1 = 223 THEN 9.085176e-01
  357. WHEN $1 = 224 THEN 1.000000e+00
  358. WHEN $1 = 225 THEN 1.000000e+01
  359. WHEN $1 = 226 THEN 1.000000e+02
  360. WHEN $1 = 227 THEN 1.000000e+03
  361. WHEN $1 = 228 THEN 1.000000e+04
  362. WHEN $1 = 229 THEN 1.000000e+05
  363. WHEN $1 = 230 THEN 1.000000e+06
  364. WHEN $1 = 231 THEN 1.000000e+07
  365. WHEN $1 = 232 THEN 1.000000e+08
  366. WHEN $1 = 233 THEN 1.000000e+09
  367. WHEN $1 = 234 THEN 1.000000e+10
  368. WHEN $1 = 235 THEN 1.000000e+11
  369. WHEN $1 = 236 THEN 1.000000e+12
  370. WHEN $1 = 237 THEN 1.000000e+13
  371. WHEN $1 = 238 THEN 1.000000e+14
  372. WHEN $1 = 239 THEN 1.000000e+15
  373. WHEN $1 = 240 THEN 1.000000e+16
  374. WHEN $1 = 241 THEN 1.000000e+17
  375. WHEN $1 = 242 THEN 1.000000e+18
  376. WHEN $1 = 243 THEN 1.000000e+19
  377. WHEN $1 = 244 THEN 1.000000e+20
  378. WHEN $1 = 245 THEN 1.000000e+21
  379. WHEN $1 = 246 THEN 1.000000e+22
  380. WHEN $1 = 247 THEN 1.000000e+23
  381. WHEN $1 = 248 THEN 1.000000e+24
  382. WHEN $1 = 249 THEN 1.000000e+25
  383. WHEN $1 = 250 THEN 1.000000e+26
  384. WHEN $1 = 251 THEN 1.000000e+27
  385. WHEN $1 = 252 THEN 1.000000e+28
  386. WHEN $1 = 253 THEN 1.000000e+29
  387. WHEN $1 = 254 THEN 1.000000e+30
  388. WHEN $1 = 255 THEN 1.000000e+31
  389. END INTO perc;
  390. RETURN perc;
  391. END;
  392. $BODY$
  393. LANGUAGE plpgsql;
  394. -- +migrate StatementEnd
  395. -- +migrate StatementBegin
  396. CREATE FUNCTION set_tx()
  397. RETURNS TRIGGER
  398. AS
  399. $BODY$
  400. DECLARE
  401. _value NUMERIC;
  402. _usd_update TIMESTAMP;
  403. _tx_timestamp TIMESTAMP;
  404. BEGIN
  405. IF NEW.is_l1 THEN
  406. -- Validate
  407. IF NEW.user_origin IS NULL OR
  408. NEW.from_eth_addr IS NULL OR
  409. NEW.from_bjj IS NULL OR
  410. NEW.load_amount IS NULL OR
  411. NEW.load_amount_f IS NULL OR
  412. (NOT NEW.user_origin AND NEW.batch_num IS NULL) THEN -- If is Coordinator L1, must include batch_num
  413. RAISE EXCEPTION 'Invalid L1 tx.';
  414. END IF;
  415. ELSE
  416. -- Validate
  417. IF NEW.batch_num IS NULL OR NEW.nonce IS NULL THEN
  418. RAISE EXCEPTION 'Invalid L2 tx.';
  419. END IF;
  420. -- Set fee if it's null
  421. IF NEW.fee IS NULL THEN
  422. NEW.fee = (SELECT 0);
  423. END IF;
  424. -- Set token_id
  425. NEW."token_id" = (SELECT token_id FROM account WHERE idx = NEW."from_idx");
  426. -- Set from_{eth_addr,bjj}
  427. SELECT INTO NEW."from_eth_addr", NEW."from_bjj" eth_addr, bjj FROM account WHERE idx = NEW.from_idx;
  428. END IF;
  429. -- Set USD related
  430. SELECT INTO _value, _usd_update, _tx_timestamp
  431. usd / POWER(10, decimals), usd_update, timestamp FROM token INNER JOIN block on token.eth_block_num = block.eth_block_num WHERE token_id = NEW.token_id;
  432. IF _tx_timestamp - interval '24 hours' < _usd_update AND _tx_timestamp + interval '24 hours' > _usd_update THEN
  433. NEW."amount_usd" = (SELECT _value * NEW.amount_f);
  434. IF NOT NEW.is_l1 THEN
  435. NEW."fee_usd" = (SELECT NEW."amount_usd" * fee_percentage(NEW.fee::NUMERIC));
  436. ELSE
  437. NEW."load_amount_usd" = (SELECT _value * NEW.load_amount_f);
  438. END IF;
  439. END IF;
  440. -- Set to_{eth_addr,bjj}
  441. IF NEW.to_idx > 255 THEN
  442. SELECT INTO NEW."to_eth_addr", NEW."to_bjj" eth_addr, bjj FROM account WHERE idx = NEW.to_idx;
  443. END IF;
  444. RETURN NEW;
  445. END;
  446. $BODY$
  447. LANGUAGE plpgsql;
  448. -- +migrate StatementEnd
  449. CREATE TRIGGER trigger_set_tx BEFORE INSERT ON tx
  450. FOR EACH ROW EXECUTE PROCEDURE set_tx();
  451. -- +migrate StatementBegin
  452. CREATE FUNCTION forge_l1_user_txs()
  453. RETURNS TRIGGER
  454. AS
  455. $BODY$
  456. BEGIN
  457. IF NEW.forge_l1_txs_num IS NOT NULL THEN
  458. UPDATE tx
  459. SET item_id = nextval('tx_item_id'), batch_num = NEW.batch_num
  460. WHERE id IN (
  461. SELECT id FROM tx
  462. WHERE user_origin AND NEW.forge_l1_txs_num = to_forge_l1_txs_num
  463. ORDER BY position
  464. FOR UPDATE
  465. );
  466. END IF;
  467. RETURN NEW;
  468. END;
  469. $BODY$
  470. LANGUAGE plpgsql;
  471. -- +migrate StatementEnd
  472. CREATE TRIGGER trigger_forge_l1_txs AFTER INSERT ON batch
  473. FOR EACH ROW EXECUTE PROCEDURE forge_l1_user_txs();
  474. CREATE TABLE rollup_vars (
  475. eth_block_num BIGINT PRIMARY KEY REFERENCES block (eth_block_num) ON DELETE CASCADE,
  476. forge_l1_timeout BYTEA NOT NULL,
  477. fee_l1_user_tx BYTEA NOT NULL,
  478. fee_add_token BYTEA NOT NULL,
  479. tokens_hez BYTEA NOT NULL,
  480. governance BYTEA NOT NULL
  481. );
  482. CREATE TABLE consensus_vars (
  483. eth_block_num BIGINT PRIMARY KEY REFERENCES block (eth_block_num) ON DELETE CASCADE,
  484. slot_deadline INT NOT NULL,
  485. close_auction_slots INT NOT NULL,
  486. open_auction_slots INT NOT NULL,
  487. min_bid_slots VARCHAR(200) NOT NULL,
  488. outbidding INT NOT NULL,
  489. donation_address BYTEA NOT NULL,
  490. governance_address BYTEA NOT NULL,
  491. allocation_ratio VARCHAR(200)
  492. );
  493. -- L2
  494. CREATE TABLE tx_pool (
  495. tx_id BYTEA PRIMARY KEY,
  496. from_idx BIGINT NOT NULL,
  497. from_eth_addr BYTEA,
  498. from_bjj BYTEA,
  499. to_idx BIGINT,
  500. to_eth_addr BYTEA,
  501. to_bjj BYTEA,
  502. token_id INT NOT NULL REFERENCES token (token_id) ON DELETE CASCADE,
  503. amount BYTEA NOT NULL,
  504. amount_f NUMERIC NOT NULL,
  505. fee SMALLINT NOT NULL,
  506. nonce BIGINT NOT NULL,
  507. state CHAR(4) NOT NULL,
  508. signature BYTEA NOT NULL,
  509. timestamp TIMESTAMP WITHOUT TIME ZONE DEFAULT timezone('utc', now()),
  510. batch_num BIGINT,
  511. rq_from_idx BIGINT,
  512. rq_to_idx BIGINT,
  513. rq_to_eth_addr BYTEA,
  514. rq_to_bjj BYTEA,
  515. rq_token_id INT,
  516. rq_amount BYTEA,
  517. rq_fee SMALLINT,
  518. rq_nonce BIGINT,
  519. tx_type VARCHAR(40) NOT NULL
  520. );
  521. -- +migrate StatementBegin
  522. CREATE FUNCTION set_pool_tx()
  523. RETURNS TRIGGER
  524. AS
  525. $BODY$
  526. BEGIN
  527. SELECT INTO NEW."from_eth_addr", NEW."from_bjj" eth_addr, bjj FROM account WHERE idx = NEW."from_idx";
  528. -- Set to_{eth_addr,bjj}
  529. IF NEW.to_idx > 255 THEN
  530. SELECT INTO NEW."to_eth_addr", NEW."to_bjj" eth_addr, bjj FROM account WHERE idx = NEW."to_idx";
  531. END IF;
  532. RETURN NEW;
  533. END;
  534. $BODY$
  535. LANGUAGE plpgsql;
  536. -- +migrate StatementEnd
  537. CREATE TRIGGER trigger_set_pool_tx BEFORE INSERT ON tx_pool
  538. FOR EACH ROW EXECUTE PROCEDURE set_pool_tx();
  539. CREATE TABLE account_creation_auth (
  540. eth_addr BYTEA PRIMARY KEY,
  541. bjj BYTEA NOT NULL,
  542. signature BYTEA NOT NULL,
  543. timestamp TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT timezone('utc', now())
  544. );
  545. -- +migrate Down
  546. DROP TABLE account_creation_auth;
  547. DROP TABLE tx_pool;
  548. DROP TABLE consensus_vars;
  549. DROP TABLE rollup_vars;
  550. DROP TABLE account;
  551. DROP TABLE tx;
  552. DROP TABLE token;
  553. DROP TABLE bid;
  554. DROP TABLE exit_tree;
  555. DROP TABLE batch;
  556. DROP TABLE coordinator;
  557. DROP TABLE block;