Rename Transakcio to Til for a easier usage

Rename Transakcio to Til for a easier usage, also change til.TestContext
to til.Context, and til.NewTestContext to til.NewContext.
This commit is contained in:
arnaucube
2020-10-21 15:09:16 +02:00
parent cfdea57977
commit 265bdf23e3
11 changed files with 166 additions and 60 deletions

115
test/til/README.md Normal file
View File

@@ -0,0 +1,115 @@
# 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
// register the TokenID:
RegisterToken(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
}
```