mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-24 07:15:18 +00:00
fix: read only
This commit is contained in:
parent
ac57a9b4b4
commit
4db9ee49b4
@ -4,4 +4,5 @@ const (
|
|||||||
ErrGetStateDB = "get EVM StateDB failed"
|
ErrGetStateDB = "get EVM StateDB failed"
|
||||||
ErrInvalidNumberOfArgs = "invalid number of arguments; expected %d; got: %d"
|
ErrInvalidNumberOfArgs = "invalid number of arguments; expected %d; got: %d"
|
||||||
ErrSenderNotOrigin = "msg.sender is not from tx origin"
|
ErrSenderNotOrigin = "msg.sender is not from tx origin"
|
||||||
|
ErrWriteOnReadOnly = "read only call to write functions"
|
||||||
)
|
)
|
||||||
|
@ -92,6 +92,17 @@ func (d *DASignersPrecompile) RequiredGas(input []byte) uint64 {
|
|||||||
return RequiredGasMax
|
return RequiredGasMax
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d *DASignersPrecompile) IsTx(method string) bool {
|
||||||
|
switch method {
|
||||||
|
case DASignersFunctionUpdateSocket,
|
||||||
|
DASignersFunctionRegisterSigner,
|
||||||
|
DASignersFunctionRegisterNextEpoch:
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Run implements vm.PrecompiledContract.
|
// Run implements vm.PrecompiledContract.
|
||||||
func (d *DASignersPrecompile) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) ([]byte, error) {
|
func (d *DASignersPrecompile) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) ([]byte, error) {
|
||||||
// parse input
|
// parse input
|
||||||
@ -106,6 +117,10 @@ func (d *DASignersPrecompile) Run(evm *vm.EVM, contract *vm.Contract, readonly b
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
// readonly check
|
||||||
|
if readonly && d.IsTx(method.Name) {
|
||||||
|
return nil, fmt.Errorf(precopmiles_common.ErrWriteOnReadOnly)
|
||||||
|
}
|
||||||
// get state db and context
|
// get state db and context
|
||||||
stateDB, ok := evm.StateDB.(*statedb.StateDB)
|
stateDB, ok := evm.StateDB.(*statedb.StateDB)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -67,6 +67,20 @@ func (s *StakingPrecompile) RequiredGas(input []byte) uint64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *StakingPrecompile) IsTx(method string) bool {
|
||||||
|
switch method {
|
||||||
|
case StakingFunctionCreateValidator,
|
||||||
|
StakingFunctionEditValidator,
|
||||||
|
StakingFunctionDelegate,
|
||||||
|
StakingFunctionBeginRedelegate,
|
||||||
|
StakingFunctionUndelegate,
|
||||||
|
StakingFunctionCancelUnbondingDelegation:
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Run implements vm.PrecompiledContract.
|
// Run implements vm.PrecompiledContract.
|
||||||
func (s *StakingPrecompile) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) ([]byte, error) {
|
func (s *StakingPrecompile) Run(evm *vm.EVM, contract *vm.Contract, readonly bool) ([]byte, error) {
|
||||||
// parse input
|
// parse input
|
||||||
@ -81,6 +95,10 @@ func (s *StakingPrecompile) Run(evm *vm.EVM, contract *vm.Contract, readonly boo
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
// readonly check
|
||||||
|
if readonly && s.IsTx(method.Name) {
|
||||||
|
return nil, fmt.Errorf(precopmiles_common.ErrWriteOnReadOnly)
|
||||||
|
}
|
||||||
// get state db and context
|
// get state db and context
|
||||||
stateDB, ok := evm.StateDB.(*statedb.StateDB)
|
stateDB, ok := evm.StateDB.(*statedb.StateDB)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
Loading…
Reference in New Issue
Block a user