mirror of
https://github.com/arnaucube/hermez-node.git
synced 2026-02-07 03:16:45 +01:00
Review changes and operator -> coordinator
This commit is contained in:
@@ -14,5 +14,5 @@ type Account struct {
|
|||||||
Idx uint32 // bits = SMT levels (SMT levels needs to be decided)
|
Idx uint32 // bits = SMT levels (SMT levels needs to be decided)
|
||||||
Nonce uint64 // effective 48 bits
|
Nonce uint64 // effective 48 bits
|
||||||
Balance *big.Int // Up to 192 bits
|
Balance *big.Int // Up to 192 bits
|
||||||
Signature babyjub.PublicKey
|
PublicKey babyjub.PublicKey
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package common
|
package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"time"
|
|
||||||
|
|
||||||
eth "github.com/ethereum/go-ethereum/common"
|
eth "github.com/ethereum/go-ethereum/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -11,8 +9,7 @@ type Batch struct {
|
|||||||
BatchNum BatchNum
|
BatchNum BatchNum
|
||||||
SlotNum SlotNum // Slot in which the batch is forged
|
SlotNum SlotNum // Slot in which the batch is forged
|
||||||
EthTxHash eth.Hash
|
EthTxHash eth.Hash
|
||||||
BlockNum uint64 // Etherum block in which the batch is forged
|
EthBlockNum uint64 // Etherum block in which the batch is forged
|
||||||
Timestamp time.Time
|
|
||||||
Forger eth.Address
|
Forger eth.Address
|
||||||
ExitRoot Hash
|
ExitRoot Hash
|
||||||
OldRoot Hash
|
OldRoot Hash
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
// Bid is a struct that represents one bid in the PoH
|
// Bid is a struct that represents one bid in the PoH
|
||||||
// WARNING: this is strongly based on the previous implementation, once the new spec is done, this may change a lot.
|
// WARNING: this is strongly based on the previous implementation, once the new spec is done, this may change a lot.
|
||||||
type Bid struct {
|
type Bid struct {
|
||||||
SlotNum SlotNum // Slot in which the bid is done
|
SlotNum SlotNum // Slot in which the bid is done
|
||||||
InfoOperator Operator // Operaror bidder information
|
InfoCoordinator Coordinator // Operaror bidder information
|
||||||
Amount *big.Int
|
Amount *big.Int
|
||||||
}
|
}
|
||||||
|
|||||||
18
common/coordinator.go
Normal file
18
common/coordinator.go
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
eth "github.com/ethereum/go-ethereum/common"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Coordinator represents a Hermez network coordinator who wins an auction for an specific slot
|
||||||
|
// WARNING: this is strongly based on the previous implementation, once the new spec is done, this may change a lot.
|
||||||
|
type Coordinator struct {
|
||||||
|
CoordinatorID CoordinatorID
|
||||||
|
Forger eth.Address // address of the forger
|
||||||
|
Beneficiary eth.Address // address of the beneficiary
|
||||||
|
Withdraw eth.Address // address of the withdraw
|
||||||
|
URL string // URL of the coordinators API
|
||||||
|
}
|
||||||
|
|
||||||
|
// CoordinatorID is use to identify a Hermez coordinator
|
||||||
|
type CoordinatorID uint64
|
||||||
@@ -12,25 +12,8 @@ type RecommendedFee struct {
|
|||||||
CreatesAccountAndRegister float64
|
CreatesAccountAndRegister float64
|
||||||
}
|
}
|
||||||
|
|
||||||
// FeeSelector is used to select a percentage from the FeePlan. Max value is 16
|
// FeeSelector is used to select a percentage from the FeePlan.
|
||||||
type FeeSelector uint8
|
type FeeSelector uint8
|
||||||
|
|
||||||
// FeePlan represents the fee model, a position in the array indicates the percentage of tokens paid in concept of fee for a transaction
|
// FeePlan represents the fee model, a position in the array indicates the percentage of tokens paid in concept of fee for a transaction
|
||||||
var FeePlan = [16]float64{
|
var FeePlan = [256]float64{}
|
||||||
0,
|
|
||||||
.001,
|
|
||||||
.002,
|
|
||||||
.005,
|
|
||||||
.01,
|
|
||||||
.02,
|
|
||||||
.05,
|
|
||||||
.1,
|
|
||||||
.2,
|
|
||||||
.5,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
5,
|
|
||||||
10,
|
|
||||||
20,
|
|
||||||
50,
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,15 +1,20 @@
|
|||||||
package common
|
package common
|
||||||
|
|
||||||
import "math/big"
|
import (
|
||||||
|
"math/big"
|
||||||
|
|
||||||
|
eth "github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/iden3/go-iden3-crypto/babyjub"
|
||||||
|
)
|
||||||
|
|
||||||
// L1Tx is a struct that represents an already forged L1 tx
|
// L1Tx is a struct that represents an already forged L1 tx
|
||||||
// WARNING: this struct is very unclear and a complete guess
|
// WARNING: this struct is very unclear and a complete guess
|
||||||
type L1Tx struct {
|
type L1Tx struct {
|
||||||
Tx
|
Tx
|
||||||
Ax *big.Int // Ax is the x coordinate of the BabyJubJub curve point
|
PublicKey babyjub.PublicKey
|
||||||
Ay *big.Int // Ay is the y coordinate of the BabyJubJub curve point
|
|
||||||
LoadAmount *big.Int // amount transfered from L1 -> L2
|
LoadAmount *big.Int // amount transfered from L1 -> L2
|
||||||
Mined bool
|
EthBlockNum uint64
|
||||||
BlockNum uint64
|
EthTxHash eth.Hash
|
||||||
|
Position int // Position among all the L1Txs in that batch
|
||||||
ToForgeL1TxsNumber uint32
|
ToForgeL1TxsNumber uint32
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,5 +8,6 @@ import (
|
|||||||
type L2Tx struct {
|
type L2Tx struct {
|
||||||
Tx
|
Tx
|
||||||
Forged time.Time // time when received by the tx pool
|
Forged time.Time // time when received by the tx pool
|
||||||
BatchNum BatchNum // Batch in which the tx was forged, 0 means not forged
|
BatchNum BatchNum // Batch in which the tx was forged
|
||||||
|
Position int // Position among all the L1Txs in that batch
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
package common
|
|
||||||
|
|
||||||
import (
|
|
||||||
eth "github.com/ethereum/go-ethereum/common"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Operator represents a Hermez network operator who wins an auction for an specific slot
|
|
||||||
// WARNING: this is strongly based on the previous implementation, once the new spec is done, this may change a lot.
|
|
||||||
type Operator struct {
|
|
||||||
Forger eth.Address // address of the forger
|
|
||||||
Beneficiary eth.Address // address of the beneficiary
|
|
||||||
Withdraw eth.Address // address of the withdraw
|
|
||||||
URL string // URL of the operators API
|
|
||||||
}
|
|
||||||
@@ -6,15 +6,15 @@ import (
|
|||||||
eth "github.com/ethereum/go-ethereum/common"
|
eth "github.com/ethereum/go-ethereum/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PoHState give information about the forging mechanism of the Hermez network, and the synchronization status between the operator and the smart contract
|
// PoHState give information about the forging mechanism of the Hermez network, and the synchronization status between the coordinator and the smart contract
|
||||||
// WARNING: this is strongly based on the previous implementation, once the new spec is done, this may change a lot.
|
// WARNING: this is strongly based on the previous implementation, once the new spec is done, this may change a lot.
|
||||||
type PoHState struct {
|
type PoHState struct {
|
||||||
IsSynched bool // true if the operator is fully synched with the ¿PoH? smart contract
|
IsSynched bool // true if the coordinator is fully synched with the ¿PoH? smart contract
|
||||||
SyncProgress float32 // percentage of synced progress with the ¿PoH? smart contract
|
SyncProgress float32 // percentage of synced progress with the ¿PoH? smart contract
|
||||||
CurrentSlot SlotNum // slot in which batches are being forged at the current time
|
CurrentSlot SlotNum // slot in which batches are being forged at the current time
|
||||||
ContractAddr eth.Address // Etherum address of the ¿PoH? smart contract
|
ContractAddr eth.Address // Etherum address of the ¿PoH? smart contract
|
||||||
BlocksPerSlot uint16 // Slot duration measured in Etherum blocks
|
BlocksPerSlot uint16 // Slot duration measured in Etherum blocks
|
||||||
SlotDeadline uint16 // Time of the slot in which another operator can forge if the operator winner has not forge any block before
|
SlotDeadline uint16 // Time of the slot in which another coordinator can forge if the coordinator winner has not forge any block before
|
||||||
GenesisBlock uint64 // uint64 is a guess, Etherum block in which the ¿PoH? contract was deployed
|
GenesisBlock uint64 // uint64 is a guess, Etherum block in which the ¿PoH? contract was deployed
|
||||||
MinBid *big.Int // Minimum amount that an operator has to bid to participate in a slot auction
|
MinBid *big.Int // Minimum amount that an coordinator has to bid to participate in a slot auction
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
"github.com/iden3/go-iden3-crypto/babyjub"
|
"github.com/iden3/go-iden3-crypto/babyjub"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PoolL2Tx is a struct that represents a L2Tx sent by an account to the operator hat is waiting to be forged
|
// PoolL2Tx is a struct that represents a L2Tx sent by an account to the coordinator hat is waiting to be forged
|
||||||
type PoolL2Tx struct {
|
type PoolL2Tx struct {
|
||||||
Tx
|
Tx
|
||||||
Status PoolL2TxStatus
|
Status PoolL2TxStatus
|
||||||
@@ -23,12 +23,12 @@ type PoolL2Tx struct {
|
|||||||
type PoolL2TxStatus string
|
type PoolL2TxStatus string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// Pending represents a valid L2Tx that hasn't started the forging process
|
// PoolL2TxStatusPending represents a valid L2Tx that hasn't started the forging process
|
||||||
Pending PoolL2TxStatus = "Pending"
|
PoolL2TxStatusPending PoolL2TxStatus = "Pending"
|
||||||
// Forging represents a valid L2Tx that has started the forging process
|
// PoolL2TxStatusForging represents a valid L2Tx that has started the forging process
|
||||||
Forging PoolL2TxStatus = "Forging"
|
PoolL2TxStatusForging PoolL2TxStatus = "Forging"
|
||||||
// Forged represents a L2Tx that has already been forged
|
// PoolL2TxStatusForged represents a L2Tx that has already been forged
|
||||||
Forged PoolL2TxStatus = "Forged"
|
PoolL2TxStatusForged PoolL2TxStatus = "Forged"
|
||||||
// Invalid represents a L2Tx that has been invalidated
|
// PoolL2TxStatusInvalid represents a L2Tx that has been invalidated
|
||||||
Invalid PoolL2TxStatus = "Invalid"
|
PoolL2TxStatusInvalid PoolL2TxStatus = "Invalid"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ import (
|
|||||||
eth "github.com/ethereum/go-ethereum/common"
|
eth "github.com/ethereum/go-ethereum/common"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RollupState give information about the rollup, and the synchronization status between the operator and the smart contract
|
// RollupState give information about the rollup, and the synchronization status between the coordinator and the smart contract
|
||||||
type RollupState struct {
|
type RollupState struct {
|
||||||
IsSynched bool // true if the operator is fully synched with the rollup smart contract
|
IsSynched bool // true if the coordinator is fully synched with the rollup smart contract
|
||||||
SyncProgress float32 // percentage of synced progress with the rollup smart contract
|
SyncProgress float32 // percentage of synced progress with the rollup smart contract
|
||||||
LastBlockSynched uint64 // last Etherum block synchronized by the operator
|
LastBlockSynched uint64 // last Etherum block synchronized by the coordinator
|
||||||
LastBatchSynched BatchNum // last batch synchronized by the operator
|
LastBatchSynched BatchNum // last batch synchronized by the coordinator
|
||||||
FeeDeposit *big.Int // amount of eth (in wei) that has to be payed to do a deposit
|
FeeDeposit *big.Int // amount of eth (in wei) that has to be payed to do a deposit
|
||||||
FeeL1Tx *big.Int // amount of eth (in wei) that has to be payed to do a L1 tx
|
FeeL1Tx *big.Int // amount of eth (in wei) that has to be payed to do a L1 tx
|
||||||
ContractAddr eth.Address // Etherum address of the rollup smart contract
|
ContractAddr eth.Address // Etherum address of the rollup smart contract
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ package common
|
|||||||
// WARNING: this is strongly based on the previous implementation, once the new spec is done, this may change a lot.
|
// WARNING: this is strongly based on the previous implementation, once the new spec is done, this may change a lot.
|
||||||
type Slot struct {
|
type Slot struct {
|
||||||
SlotNum SlotNum
|
SlotNum SlotNum
|
||||||
StartingBlock uint64 // Etherum block in which the slot starts
|
StartingBlock uint64 // Etherum block in which the slot starts
|
||||||
Forger Operator // Current Operaror winner information
|
Forger Coordinator // Current Operaror winner information
|
||||||
}
|
}
|
||||||
|
|
||||||
// SlotNum identifies a slot
|
// SlotNum identifies a slot
|
||||||
|
|||||||
24
common/tx.go
24
common/tx.go
@@ -27,16 +27,16 @@ type TxID Hash // Hash is a guess
|
|||||||
type TxType string
|
type TxType string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// Exit represents L2->L1 token transfer. A leaf for this account appears in the exit tree of the block
|
// TxTypeExit represents L2->L1 token transfer. A leaf for this account appears in the exit tree of the block
|
||||||
Exit TxType = "Exit"
|
TxTypeExit TxType = "Exit"
|
||||||
// Withdrawn represents the balance that was moved from L2->L1 has been widthrawn from the smart contract
|
// TxTypeWithdrawn represents the balance that was moved from L2->L1 has been widthrawn from the smart contract
|
||||||
Withdrawn TxType = "Withdrawn"
|
TxTypeWithdrawn TxType = "Withdrawn"
|
||||||
// Transfer represents L2->L2 token transfer
|
// TxTypeTransfer represents L2->L2 token transfer
|
||||||
Transfer TxType = "Transfer"
|
TxTypeTransfer TxType = "Transfer"
|
||||||
// Deposit represents L1->L2 transfer
|
// TxTypeDeposit represents L1->L2 transfer
|
||||||
Deposit TxType = "Deposit"
|
TxTypeDeposit TxType = "Deposit"
|
||||||
// CreateAccountDeposit represents creation of a new leaf in the state tree (newAcconut) + L1->L2 transfer
|
// TxTypeCreateAccountDeposit represents creation of a new leaf in the state tree (newAcconut) + L1->L2 transfer
|
||||||
CreateAccountDeposit TxType = "CreateAccountDeposit"
|
TxTypeCreateAccountDeposit TxType = "CreateAccountDeposit"
|
||||||
// CreateAccountDepositTransfer represents L1->L2 transfer + L2->L2 transfer
|
// TxTypeCreateAccountDepositTransfer represents L1->L2 transfer + L2->L2 transfer
|
||||||
CreateAccountDepositTransfer TxType = "CreateAccountDepositTransfer"
|
TxTypeCreateAccountDepositTransfer TxType = "CreateAccountDepositTransfer"
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user