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.

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