core: align overflow checks in IntrinsicGas

This commit is contained in:
kourin 2024-12-18 18:47:53 +09:00
parent 1321a42525
commit c40cb1be5f

View file

@ -110,11 +110,24 @@ func IntrinsicGas(data []byte, accessList types.AccessList, authList []types.Aut
} }
} }
if accessList != nil { if accessList != nil {
gas += uint64(len(accessList)) * params.TxAccessListAddressGas numItems := uint64(len(accessList))
gas += uint64(accessList.StorageKeys()) * params.TxAccessListStorageKeyGas if (math.MaxUint64-gas)/params.TxAccessListAddressGas < numItems {
return 0, ErrGasUintOverflow
}
gas += numItems * params.TxAccessListAddressGas
numStorageKeys := uint64(accessList.StorageKeys())
if (math.MaxUint64-gas)/params.TxAccessListStorageKeyGas < numStorageKeys {
return 0, ErrGasUintOverflow
}
gas += numStorageKeys * params.TxAccessListStorageKeyGas
} }
if authList != nil { if authList != nil {
gas += uint64(len(authList)) * params.CallNewAccountGas numItems := uint64(len(authList))
if (math.MaxUint64-gas)/params.CallNewAccountGas < numItems {
return 0, ErrGasUintOverflow
}
gas += numItems * params.CallNewAccountGas
} }
return gas, nil return gas, nil
} }