mirror of
https://github.com/arnaucube/hermez-node.git
synced 2026-02-07 03:16:45 +01:00
Add account_update SQL table with balances and nonces
This commit is contained in:
@@ -528,6 +528,37 @@ func (hdb *HistoryDB) GetAllAccounts() ([]common.Account, error) {
|
||||
return db.SlicePtrsToSlice(accs).([]common.Account), tracerr.Wrap(err)
|
||||
}
|
||||
|
||||
// AddAccountUpdates inserts accUpdates into the DB
|
||||
func (hdb *HistoryDB) AddAccountUpdates(accUpdates []common.AccountUpdate) error {
|
||||
return tracerr.Wrap(hdb.addAccountUpdates(hdb.db, accUpdates))
|
||||
}
|
||||
func (hdb *HistoryDB) addAccountUpdates(d meddler.DB, accUpdates []common.AccountUpdate) error {
|
||||
if len(accUpdates) == 0 {
|
||||
return nil
|
||||
}
|
||||
return tracerr.Wrap(db.BulkInsert(
|
||||
d,
|
||||
`INSERT INTO account_update (
|
||||
eth_block_num,
|
||||
batch_num,
|
||||
idx,
|
||||
nonce,
|
||||
balance
|
||||
) VALUES %s;`,
|
||||
accUpdates,
|
||||
))
|
||||
}
|
||||
|
||||
// GetAllAccountUpdates returns all the AccountUpdate from the DB
|
||||
func (hdb *HistoryDB) GetAllAccountUpdates() ([]common.AccountUpdate, error) {
|
||||
var accUpdates []*common.AccountUpdate
|
||||
err := meddler.QueryAll(
|
||||
hdb.db, &accUpdates,
|
||||
"SELECT eth_block_num, batch_num, idx, nonce, balance FROM account_update ORDER BY idx;",
|
||||
)
|
||||
return db.SlicePtrsToSlice(accUpdates).([]common.AccountUpdate), tracerr.Wrap(err)
|
||||
}
|
||||
|
||||
// AddL1Txs inserts L1 txs to the DB. USD and DepositAmountUSD will be set automatically before storing the tx.
|
||||
// If the tx is originated by a coordinator, BatchNum must be provided. If it's originated by a user,
|
||||
// BatchNum should be null, and the value will be setted by a trigger when a batch forges the tx.
|
||||
@@ -1018,6 +1049,11 @@ func (hdb *HistoryDB) AddBlockSCData(blockData *common.BlockData) (err error) {
|
||||
return tracerr.Wrap(err)
|
||||
}
|
||||
|
||||
// Add accountBalances if it exists
|
||||
if err := hdb.addAccountUpdates(txn, batch.UpdatedAccounts); err != nil {
|
||||
return tracerr.Wrap(err)
|
||||
}
|
||||
|
||||
// Set the EffectiveAmount and EffectiveDepositAmount of all the
|
||||
// L1UserTxs that have been forged in this batch
|
||||
if err = hdb.setExtraInfoForgedL1UserTxs(txn, batch.L1UserTxs); err != nil {
|
||||
|
||||
@@ -377,6 +377,22 @@ func TestAccounts(t *testing.T) {
|
||||
accs[i].Balance = nil
|
||||
assert.Equal(t, accs[i], acc)
|
||||
}
|
||||
// Test AccountBalances
|
||||
accUpdates := make([]common.AccountUpdate, len(accs))
|
||||
for i, acc := range accs {
|
||||
accUpdates[i] = common.AccountUpdate{
|
||||
EthBlockNum: batches[acc.BatchNum-1].EthBlockNum,
|
||||
BatchNum: acc.BatchNum,
|
||||
Idx: acc.Idx,
|
||||
Nonce: common.Nonce(i),
|
||||
Balance: big.NewInt(int64(i)),
|
||||
}
|
||||
}
|
||||
err = historyDB.AddAccountUpdates(accUpdates)
|
||||
require.NoError(t, err)
|
||||
fetchedAccBalances, err := historyDB.GetAllAccountUpdates()
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, accUpdates, fetchedAccBalances)
|
||||
}
|
||||
|
||||
func TestTxs(t *testing.T) {
|
||||
|
||||
@@ -100,6 +100,15 @@ CREATE TABLE account (
|
||||
eth_addr BYTEA NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE account_update (
|
||||
item_id SERIAL,
|
||||
eth_block_num BIGINT NOT NULL REFERENCES block (eth_block_num) ON DELETE CASCADE,
|
||||
batch_num BIGINT NOT NULL REFERENCES batch (batch_num) ON DELETE CASCADE,
|
||||
idx BIGINT NOT NULL REFERENCES account (idx) ON DELETE CASCADE,
|
||||
nonce BIGINT NOT NULL,
|
||||
balance BYTEA NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE exit_tree (
|
||||
item_id SERIAL PRIMARY KEY,
|
||||
batch_num BIGINT REFERENCES batch (batch_num) ON DELETE CASCADE,
|
||||
@@ -674,6 +683,7 @@ DROP TABLE token_exchange;
|
||||
DROP TABLE wdelayer_vars;
|
||||
DROP TABLE tx;
|
||||
DROP TABLE exit_tree;
|
||||
DROP TABLE account_update;
|
||||
DROP TABLE account;
|
||||
DROP TABLE token;
|
||||
DROP TABLE bid;
|
||||
|
||||
Reference in New Issue
Block a user