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.

356 lines
8.0 KiB

Update missing parts, improve til, and more - Node - Updated configuration to initialize the interface to all the smart contracts - Common - Moved BlockData and BatchData types to common so that they can be shared among: historydb, til and synchronizer - Remove hash.go (it was never used) - Remove slot.go (it was never used) - Remove smartcontractparams.go (it was never used, and appropriate structs are defined in `eth/`) - Comment state / status method until requirements of this method are properly defined, and move it to Synchronizer - Synchronizer - Simplify `Sync` routine to only sync one block per call, and return useful information. - Use BlockData and BatchData from common - Check that events belong to the expected block hash - In L1Batch, query L1UserTxs from HistoryDB - Fill ERC20 token information - Test AddTokens with test.Client - HistryDB - Use BlockData and BatchData from common - Add `GetAllTokens` method - Uncomment and update GetL1UserTxs (with corresponding tests) - Til - Rename all instances of RegisterToken to AddToken (to follow the smart contract implementation naming) - Use BlockData and BatchData from common - Move testL1CoordinatorTxs and testL2Txs to a separate struct from BatchData in Context - Start Context with BatchNum = 1 (which the protocol defines to be the first batchNum) - In every Batch, set StateRoot and ExitRoot to a non-nil big.Int (zero). - In all L1Txs, if LoadAmount is not used, set it to 0; if Amount is not used, set it to 0; so that no *big.Int is nil. - In L1UserTx, don't set BatchNum, because when L1UserTxs are created and obtained by the synchronizer, the BatchNum is not known yet (it's a synchronizer job to set it) - In L1UserTxs, set `UserOrigin` and set `ToForgeL1TxsNum`.
4 years ago
  1. package til
  2. // sets of instructions to be used in tests of other packages
  3. // NOTE: FeeSelector(126) ~ 10%
  4. // NOTE: FeeSelector(100) ~ 4%
  5. // SetBlockchain0 contains a set of transactions simulated to be from the smart contract
  6. var SetBlockchain0 = `
  7. // Set containing Blockchain transactions
  8. Type: Blockchain
  9. AddToken(1)
  10. AddToken(2)
  11. AddToken(3)
  12. // block:0 batch:0
  13. // Coordinator accounts, Idxs: 256, 257, 258, 259
  14. CreateAccountCoordinator(0) Coord
  15. CreateAccountCoordinator(1) Coord
  16. CreateAccountCoordinator(2) Coord
  17. CreateAccountCoordinator(3) Coord
  18. > batch
  19. // block:0 batch:1
  20. // deposits TokenID: 1
  21. CreateAccountDeposit(1) A: 50
  22. CreateAccountDeposit(1) B: 5
  23. CreateAccountDeposit(1) C: 200
  24. CreateAccountDeposit(1) D: 25
  25. CreateAccountDeposit(1) E: 25
  26. CreateAccountDeposit(1) F: 25
  27. CreateAccountDeposit(1) G: 25
  28. CreateAccountDeposit(1) H: 25
  29. CreateAccountDeposit(1) I: 25
  30. CreateAccountDeposit(1) J: 25
  31. CreateAccountDeposit(1) K: 25
  32. CreateAccountDeposit(1) L: 25
  33. CreateAccountDeposit(1) M: 25
  34. CreateAccountDeposit(1) N: 25
  35. CreateAccountDeposit(1) O: 25
  36. CreateAccountDeposit(1) P: 25
  37. CreateAccountDeposit(1) Q: 25
  38. CreateAccountDeposit(1) R: 25
  39. CreateAccountDeposit(1) S: 25
  40. CreateAccountDeposit(1) T: 25
  41. CreateAccountDeposit(1) U: 25
  42. CreateAccountDeposit(1) V: 25
  43. CreateAccountDeposit(1) W: 25
  44. CreateAccountDeposit(1) X: 25
  45. CreateAccountDeposit(1) Y: 25
  46. CreateAccountDeposit(1) Z: 25
  47. // deposits TokenID: 2
  48. CreateAccountDeposit(2) B: 5
  49. CreateAccountDeposit(2) A: 20
  50. // deposits TokenID: 3
  51. CreateAccountDeposit(3) B: 100
  52. // deposits TokenID: 0
  53. CreateAccountDeposit(0) B: 10000
  54. CreateAccountDeposit(0) C: 1
  55. > batchL1
  56. // block:0 batch:2
  57. // transactions TokenID: 1
  58. Transfer(1) A-B: 5 (1)
  59. Transfer(1) A-L: 10 (1)
  60. Transfer(1) A-M: 5 (1)
  61. Transfer(1) A-N: 5 (1)
  62. Transfer(1) A-O: 5 (1)
  63. Transfer(1) B-C: 3 (1)
  64. Transfer(1) C-A: 10 (126)
  65. Transfer(1) D-A: 5 (1)
  66. Transfer(1) D-Z: 5 (1)
  67. Transfer(1) D-Y: 5 (1)
  68. Transfer(1) D-X: 5 (1)
  69. Transfer(1) E-Z: 5 (2)
  70. Transfer(1) E-Y: 5 (1)
  71. Transfer(1) E-X: 5 (1)
  72. Transfer(1) F-Z: 5 (1)
  73. Transfer(1) G-K: 3 (1)
  74. Transfer(1) G-K: 3 (1)
  75. Transfer(1) G-K: 3 (1)
  76. Transfer(1) H-K: 3 (2)
  77. Transfer(1) H-K: 3 (1)
  78. Transfer(1) H-K: 3 (1)
  79. Transfer(0) B-C: 50 (100)
  80. > batchL1
  81. > block
  82. // block:1 batch:0
  83. // A (3) still does not exist, coordinator should create new L1Tx to create the account
  84. CreateAccountCoordinator(3) A
  85. Transfer(1) A-B: 1 (1)
  86. Transfer(1) A-B: 1 (1)
  87. Transfer(1) A-B: 1 (1)
  88. Transfer(3) B-A: 5 (1)
  89. Transfer(2) A-B: 5 (1)
  90. Transfer(1) I-K: 3 (1)
  91. Transfer(1) I-K: 3 (1)
  92. Transfer(1) I-K: 3 (1)
  93. Transfer(1) J-K: 3 (1)
  94. Transfer(1) J-K: 3 (1)
  95. Transfer(1) J-K: 3 (1)
  96. Transfer(1) K-J: 3 (1)
  97. Transfer(1) L-A: 5 (1)
  98. Transfer(1) L-Z: 5 (1)
  99. Transfer(1) L-Y: 5 (1)
  100. Transfer(1) L-X: 5 (1)
  101. Transfer(1) M-A: 5 (1)
  102. Transfer(1) M-Z: 5 (1)
  103. Transfer(1) M-Y: 5 (1)
  104. Transfer(1) N-A: 5 (1)
  105. Transfer(1) N-Z: 5 (2)
  106. Transfer(1) N-Y: 5 (1)
  107. Transfer(1) O-T: 3 (1)
  108. Transfer(1) O-U: 3 (1)
  109. Transfer(1) O-V: 3 (1)
  110. Transfer(1) P-T: 3 (1)
  111. Transfer(1) P-U: 3 (1)
  112. Transfer(1) P-V: 3 (5)
  113. Transfer(1) Q-O: 3 (1)
  114. Transfer(1) Q-P: 3 (1)
  115. Transfer(1) R-O: 3 (1)
  116. Transfer(1) R-P: 3 (1)
  117. Transfer(1) R-Q: 3 (1)
  118. Transfer(1) S-O: 3 (1)
  119. Transfer(1) S-P: 3 (1)
  120. Transfer(1) S-Q: 3 (1)
  121. Transfer(1) T-O: 3 (1)
  122. Transfer(1) T-P: 3 (1)
  123. Transfer(1) T-Q: 3 (1)
  124. Transfer(1) U-Z: 5 (3)
  125. Transfer(1) U-Y: 5 (1)
  126. Transfer(1) U-T: 3 (1)
  127. Transfer(1) V-Z: 5 (0)
  128. Transfer(1) V-Y: 6 (1)
  129. Transfer(1) V-T: 3 (1)
  130. Transfer(1) W-K: 3 (1)
  131. Transfer(1) W-J: 3 (1)
  132. Transfer(1) W-A: 5 (1)
  133. Transfer(1) W-Z: 5 (1)
  134. Transfer(1) X-B: 5 (1)
  135. Transfer(1) X-C: 10 (126)
  136. Transfer(1) X-D: 5 (1)
  137. Transfer(1) X-E: 5 (1)
  138. Transfer(1) Y-B: 5 (1)
  139. Transfer(1) Y-C: 5 (1)
  140. Transfer(1) Y-D: 5 (1)
  141. Transfer(1) Y-E: 5 (1)
  142. Transfer(1) Z-A: 5 (1)
  143. // exits
  144. ForceExit(1) A: 5
  145. Exit(1) K: 5 (1)
  146. Exit(1) X: 5 (1)
  147. Exit(1) Y: 5 (1)
  148. Exit(1) Z: 5 (1)
  149. > batch
  150. // block:1 batch:1
  151. Deposit(1) A: 50
  152. Deposit(1) B: 5
  153. Deposit(1) C: 20
  154. Deposit(1) D: 25
  155. Deposit(1) E: 25
  156. Deposit(1) F: 25
  157. Deposit(1) G: 25
  158. Deposit(1) H: 25
  159. Deposit(1) I: 25
  160. Transfer(1) A-B: 5 (1)
  161. Transfer(1) A-L: 10 (1)
  162. Transfer(1) A-M: 5 (1)
  163. Transfer(1) B-N: 5 (1)
  164. Transfer(1) C-O: 5 (1)
  165. Transfer(1) H-O: 5 (1)
  166. Transfer(1) I-H: 5 (1)
  167. Exit(1) A: 5 (1)
  168. // create CoordinatorTx CreateAccount for D, TokenId 2, used at SetPool0 for 'PoolTransfer(2) B-D: 3 (1)'
  169. CreateAccountCoordinator(2) D
  170. > batchL1
  171. > batchL1
  172. > block
  173. `
  174. // SetPool0 contains a set of transactions from the PoolL2
  175. var SetPool0 = `
  176. Type: PoolL2
  177. PoolTransfer(1) A-B: 6 (1)
  178. PoolTransfer(1) B-C: 3 (1)
  179. PoolTransfer(1) C-A: 3 (1)
  180. PoolTransfer(1) A-B: 1 (1)
  181. PoolTransfer(2) A-B: 15 (1)
  182. PoolTransfer(2) B-D: 3 (1)
  183. PoolExit(1) A: 3 (1)
  184. PoolTransfer(1) A-B: 6 (1)
  185. PoolTransfer(1) B-C: 3 (1)
  186. PoolTransfer(1) A-C: 3 (1)
  187. PoolTransferToEthAddr(1) A-C: 3 (1)
  188. PoolTransferToBJJ(1) A-C: 3 (1)
  189. `
  190. // Minimum flow
  191. // SetBlockchainMinimumFlow0 contains a set of transactions with a minimal flow
  192. var SetBlockchainMinimumFlow0 = `
  193. Type: Blockchain
  194. AddToken(1)
  195. // close Block:0, Batch:0
  196. > batch
  197. CreateAccountDeposit(0) A: 500
  198. CreateAccountDeposit(1) C: 0
  199. // close Block:0, Batch:1
  200. > batchL1 // freeze L1User{2}, forge L1Coord{0}
  201. // Expected balances:
  202. // Coord(0): 0, Coord(1): 0
  203. // C(0): 0
  204. CreateAccountDeposit(1) A: 500
  205. // close Block:0, Batch:2
  206. > batchL1 // freeze L1User{1}, forge L1User{2}
  207. // Expected balances:
  208. // Coord(0): 0, Coord(1): 0
  209. // A(0): 500
  210. // C(0): 0, C(1): 0
  211. // close Block:0, Batch:3
  212. > batchL1 // freeze L1User{nil}, forge L1User{1}
  213. // Expected balances:
  214. // Coord(0): 0, Coord(1): 0
  215. // A(0): 500, A(1): 500
  216. // C(0): 0
  217. CreateAccountDepositTransfer(0) B-A: 500, 100
  218. // close Block:0, Batch:4
  219. > batchL1 // freeze L1User{1}, forge L1User{nil}
  220. CreateAccountDeposit(0) D: 800
  221. // close Block:0, Batch:5
  222. > batchL1 // freeze L1User{1}, forge L1User{1}
  223. // Expected balances:
  224. // Coord(0): 0, Coord(1): 0
  225. // A(0): 600, A(1): 500
  226. // B(0): 400
  227. // C(0): 0
  228. // Coordinator creates needed accounts to receive Fees
  229. CreateAccountCoordinator(1) Coord
  230. CreateAccountCoordinator(0) Coord
  231. // Coordinator creates needed 'To' accounts for the L2Txs
  232. CreateAccountCoordinator(1) B
  233. CreateAccountCoordinator(0) C
  234. Transfer(1) A-B: 200 (126)
  235. Transfer(0) B-C: 100 (126)
  236. // close Block:0, Batch:6
  237. > batchL1 // forge L1User{1}, forge L1Coord{4}, forge L2{2}
  238. // Expected balances:
  239. // Coord(0): 10, Coord(1): 20
  240. // A(0): 600, A(1): 280
  241. // B(0): 290, B(1): 200
  242. // C(0): 100, C(1): 0
  243. // D(0): 800
  244. Deposit(0) C: 500
  245. DepositTransfer(0) C-D: 400, 100
  246. Transfer(0) A-B: 100 (126)
  247. Transfer(0) C-A: 50 (126)
  248. Transfer(1) B-C: 100 (126)
  249. Exit(0) A: 100 (126)
  250. ForceTransfer(0) D-B: 200
  251. ForceExit(0) B: 100
  252. // close Block:0, Batch:7
  253. > batchL1 // freeze L1User{4}, forge L1User{nil}, forge L2{4}
  254. > block
  255. // Expected balances:
  256. // Coord(0): 35, Coord(1): 30
  257. // A(0): 430, A(1): 280
  258. // B(0): 390, B(1): 90
  259. // C(0): 45, C(1): 100
  260. // D(0): 800
  261. Transfer(0) D-A: 300 (126)
  262. Transfer(0) B-D: 100 (126)
  263. // close Block:1, Batch:0
  264. > batchL1 // freeze L1User{nil}, forge L1User{4}, forge L2{1}
  265. // Expected balances:
  266. // Coord(0): 75, Coord(1): 30
  267. // A(0): 730, A(1): 280
  268. // B(0): 380, B(1): 90
  269. // C(0): 845, C(1): 100
  270. // D(0): 470
  271. CreateAccountCoordinator(0) F
  272. > batch // forge L1CoordinatorTx{1}
  273. > block
  274. `
  275. // SetPoolL2MinimumFlow0 contains a set of transactions with a minimal flow
  276. var SetPoolL2MinimumFlow0 = `
  277. Type: PoolL2
  278. PoolTransfer(0) A-B: 100 (126)
  279. PoolTransferToEthAddr(0) D-F: 100 (126)
  280. PoolExit(0) A: 100 (126)
  281. PoolTransferToEthAddr(1) A-B: 100 (126)
  282. // Expected balances:
  283. // Coord(0): 105, Coord(1): 40
  284. // A(0): 510, A(1): 170
  285. // B(0): 480, B(1): 190
  286. // C(0): 845, C(1): 100
  287. // D(0): 360
  288. // F(0): 100
  289. `
  290. // SetPoolL2MinimumFlow1 contains the same transactions than the
  291. // SetPoolL2MinimumFlow0, but simulating coming from the smart contract
  292. // (always with the parameter ToIdx filled)
  293. var SetPoolL2MinimumFlow1 = `
  294. Type: PoolL2
  295. PoolTransfer(0) A-B: 100 (126)
  296. PoolTransfer(0) D-F: 100 (126)
  297. PoolExit(0) A: 100 (126)
  298. PoolTransfer(1) A-B: 100 (126)
  299. // Expected balances:
  300. // Coord(0): 105, Coord(1): 40
  301. // A(0): 510, A(1): 170
  302. // B(0): 480, B(1): 190
  303. // C(0): 845, C(1): 100
  304. // D(0): 360
  305. // F(0): 100
  306. `