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 |
|
# Til (Test instructions language)
Language to define sets of instructions to simulate Hermez transactions (L1 & L2) with real data.
## Syntax
### Global
- Set type definition - Blockchain: generate the transactions that would come from the Hermez smart contract on the blockchain. ``` Type: Blockchain ``` - PoolL2: generate the transactions that would come from the Pool of L2Txs ``` Type: PoolL2 ```
### Blockchain set of instructions
Available instructions: ```go Type: Blockchain
// add the TokenID: AddToken(1)
// deposit of TokenID=1, on the account of tokenID=1 for the user A, of an // amount of 50 units CreateAccountDeposit(1) A: 50
// create the account of TokenID=1 for the user B, deposit of TokenID=1, on the // account of tokenID=1 for the user B, of an amount of 40 units and atomically // transfer 10 units to account of tokenID=1 for the user A, paying a fee of 2 CreateAccountDepositTransfer(1) B-A: 40, 10 (2)
// transaction generated by the Coordinator, create account for user User0 for // the TokenID=2, with a deposit of 0 CreateAccountDepositCoordinator(2) User0
// deposit of TokenID=1, at the account A, of 6 units Deposit(1) A: 6
// deposit of TokenID=1, on the account of tokenID=1 for the user B, of an // amount of 6 units and atomically transfer 10 units to account of tokenID=1 for // the user A, paying a fee of 2 DepositTransfer(1) B-A: 6, 4 (2)
// transfer of TokenID=1, from the account A to B (for that token), of 6 units, // paying a fee of 3. Transaction will be a L2Tx Transfer(1) A-B: 6 (3)
// exit of TokenID=1, from the account A (for that token), of 5 units. // Transaction will be a L2Tx Exit(1) A: 5
// force-transfer of TokenID=1, from the account A to B (for that token), of 6 // units, paying a fee of 3. Transaction will be L1UserTx of ForceTransfer type ForceTransfer(1) A-B: 6 (3)
// force-exit of TokenID=1, from the account A (for that token), of 5 units. // Transaction will be L1UserTx of ForceExit type ForceExit(1) A: 5
// advance one batch, forging without L1UserTxs, only can contain L2Txs and // L1CoordinatorTxs > batch
// advance one batch, forging with L1UserTxs (and L2Txs and L1CoordinatorTxs) > batchL1
// advance an ethereum block > block
```
### PoolL2 set of instructions
Available instructions: ```go Type: PoolL2
// transfer of TokenID=1, from the account A to B (for that token), of 6 units, // paying a fee of 4 PoolTransfer(1) A-B: 6 (4)
// exit of TokenID=1, from the account A (for that token), of 3 units PoolExit(1) A: 3 ```
## Usage
```go // create a new til.Context tc := til.NewContext(eth.RollupConstMaxL1UserTx)
// generate Blockchain blocks data from the common.SetBlockcahin0 instructions set blocks, err = tc.GenerateBlocks(common.SetBlockchain0) assert.Nil(t, err)
// generate PoolL2 transactions data from the common.SetPool0 instructions set poolL2Txs, err = tc.GenerateBlocks(common.SetPool0) assert.Nil(t, err) ```
Where `blocks` will contain: ```go // BatchData contains the information of a Batch type BatchData struct { L1CoordinatorTxs []common.L1Tx L2Txs []common.L2Tx CreatedAccounts []common.Account }
// BlockData contains the information of a Block type BlockData struct { L1UserTxs []common.L1Tx Batches []BatchData RegisteredTokens []common.Token } ```
|