Skip to content

Commit

Permalink
remove potentially dangerous unbound entrypoints
Browse files Browse the repository at this point in the history
  • Loading branch information
jorgemmsilva committed May 22, 2024
1 parent 6efe78d commit 07d9b86
Show file tree
Hide file tree
Showing 21 changed files with 38 additions and 190 deletions.
13 changes: 4 additions & 9 deletions packages/solo/chain.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/crypto"
"github.com/samber/lo"
"github.com/stretchr/testify/require"

iotago "github.com/iotaledger/iota.go/v3"
Expand Down Expand Up @@ -346,15 +347,9 @@ func (ch *Chain) GetInfo() (isc.ChainID, isc.AgentID, map[isc.Hname]*root.Contra

// GetEventsForContract calls the view in the 'blocklog' core smart contract to retrieve events for a given smart contract.
func (ch *Chain) GetEventsForContract(name string) ([]*isc.Event, error) {
viewResult, err := ch.CallView(
blocklog.Contract.Name, blocklog.ViewGetEventsForContract.Name,
blocklog.ParamContractHname, isc.Hn(name),
)
if err != nil {
return nil, err
}

return blocklog.EventsFromViewResult(viewResult)
ret := blocklog.NewStateAccess(lo.Must(ch.Store().LatestState())).
GetSmartContractEvents(isc.Hn(name), 0, math.MaxUint32)
return blocklog.EventsFromViewResult(ret)
}

// GetEventsForRequest calls the view in the 'blocklog' core smart contract to retrieve events for a given request.
Expand Down
4 changes: 2 additions & 2 deletions packages/solo/ledgerl1l2.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"math/big"
"sort"

"github.com/samber/lo"
"github.com/stretchr/testify/require"

"github.com/iotaledger/hive.go/serializer/v2"
Expand All @@ -22,8 +23,7 @@ import (

// L2Accounts returns all accounts on the chain with non-zero balances
func (ch *Chain) L2Accounts() []isc.AgentID {
d, err := ch.CallView(accounts.Contract.Name, accounts.ViewAccounts.Name)
require.NoError(ch.Env.T, err)
d := accounts.NewStateAccess(lo.Must(ch.Store().LatestState())).AllAccounts()
keys := d.KeysSorted()
ret := make([]isc.AgentID, 0, len(keys)-1)
for _, key := range keys {
Expand Down
1 change: 0 additions & 1 deletion packages/vm/core/accounts/impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ var Processor = Contract.Processor(nil,
ViewAccountNFTAmountInCollection.WithHandler(viewAccountNFTAmountInCollection),
ViewNFTIDbyMintID.WithHandler(viewNFTIDbyMintID),
ViewAccountFoundries.WithHandler(viewAccountFoundries),
ViewAccounts.WithHandler(viewAccounts),
ViewBalance.WithHandler(viewBalance),
ViewBalanceBaseToken.WithHandler(viewBalanceBaseToken),
ViewBalanceBaseTokenEVM.WithHandler(viewBalanceBaseTokenEVM),
Expand Down
5 changes: 0 additions & 5 deletions packages/vm/core/accounts/impl_views.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,6 @@ func viewTotalAssets(ctx isc.SandboxView) dict.Dict {
return getAccountBalanceDict(ctx.SchemaVersion(), ctx.StateR(), L2TotalsAccount)
}

// viewAccounts returns list of all accounts
func viewAccounts(ctx isc.SandboxView) dict.Dict {
return AllAccountsAsDict(ctx.StateR())
}

// nonces are only sent with off-ledger requests
func viewGetAccountNonce(ctx isc.SandboxView) dict.Dict {
account := ctx.Params().MustGetAgentID(ParamAgentID, ctx.Caller())
Expand Down
1 change: 0 additions & 1 deletion packages/vm/core/accounts/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ var (
ViewAccountNFTs = coreutil.ViewFunc("accountNFTs")
ViewAccountNFTsInCollection = coreutil.ViewFunc("accountNFTsInCollection")
ViewNFTIDbyMintID = coreutil.ViewFunc("NFTIDbyMintID")
ViewAccounts = coreutil.ViewFunc("accounts")
ViewBalance = coreutil.ViewFunc("balance")
ViewBalanceBaseToken = coreutil.ViewFunc("balanceBaseToken")
ViewBalanceBaseTokenEVM = coreutil.ViewFunc("balanceBaseTokenEVM")
Expand Down
5 changes: 5 additions & 0 deletions packages/vm/core/accounts/stateaccess.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/iotaledger/wasp/packages/isc"
"github.com/iotaledger/wasp/packages/kv"
"github.com/iotaledger/wasp/packages/kv/codec"
"github.com/iotaledger/wasp/packages/kv/dict"
"github.com/iotaledger/wasp/packages/kv/subrealm"
)

Expand Down Expand Up @@ -50,3 +51,7 @@ func AgentIDFromKey(key kv.Key, chainID isc.ChainID) (isc.AgentID, error) {
}
return codec.DecodeAgentID([]byte(key))
}

func (sa *StateAccess) AllAccounts() dict.Dict {
return AllAccountsAsDict(sa.state)
}
11 changes: 0 additions & 11 deletions packages/vm/core/blob/impl.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ var Processor = Contract.Processor(nil,
FuncStoreBlob.WithHandler(storeBlob),
ViewGetBlobField.WithHandler(getBlobField),
ViewGetBlobInfo.WithHandler(getBlobInfo),
ViewListBlobs.WithHandler(listBlobs),
)

func SetInitialState(state kv.KVStore) {
Expand Down Expand Up @@ -98,13 +97,3 @@ func getBlobField(ctx isc.SandboxView) dict.Dict {
ret.Set(ParamBytes, value)
return ret
}

func listBlobs(ctx isc.SandboxView) dict.Dict {
ctx.Log().Debugf("blob.listBlobs.begin")
ret := dict.New()
GetDirectoryR(ctx.StateR()).Iterate(func(hash []byte, totalSize []byte) bool {
ret.Set(kv.Key(hash), totalSize)
return true
})
return ret
}
1 change: 0 additions & 1 deletion packages/vm/core/blob/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ var (

ViewGetBlobInfo = coreutil.ViewFunc("getBlobInfo")
ViewGetBlobField = coreutil.ViewFunc("getBlobField")
ViewListBlobs = coreutil.ViewFunc("listBlobs")
)

// state variables
Expand Down
11 changes: 11 additions & 0 deletions packages/vm/core/blob/internal.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/iotaledger/wasp/packages/kv/codec"
"github.com/iotaledger/wasp/packages/kv/collections"
"github.com/iotaledger/wasp/packages/kv/dict"
"github.com/iotaledger/wasp/packages/kv/subrealm"
"github.com/iotaledger/wasp/packages/vm/vmtypes"
)

Expand Down Expand Up @@ -75,6 +76,16 @@ func GetBlobSizesR(state kv.KVStoreReader, blobHash hashing.HashValue) *collecti
return collections.NewMapReadOnly(state, sizesMapName(blobHash))
}

func ListBlobs(state kv.KVStoreReader) dict.Dict {
partition := subrealm.NewReadOnly(state, kv.Key(Contract.Hname().Bytes()))
ret := dict.New()
GetDirectoryR(partition).Iterate(func(hash []byte, totalSize []byte) bool {
ret.Set(kv.Key(hash), totalSize)
return true
})
return ret
}

func LocateProgram(state kv.KVStoreReader, programHash hashing.HashValue) (string, []byte, error) {
blbValues := GetBlobValuesR(state, programHash)
programBinary := blbValues.GetAt([]byte(VarFieldProgramBinary))
Expand Down
17 changes: 0 additions & 17 deletions packages/vm/core/blocklog/impl.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package blocklog

import (
"math"
"time"

"github.com/iotaledger/wasp/packages/isc"
Expand All @@ -15,7 +14,6 @@ import (
var Processor = Contract.Processor(nil,
ViewGetBlockInfo.WithHandler(viewGetBlockInfo),
ViewGetEventsForBlock.WithHandler(viewGetEventsForBlock),
ViewGetEventsForContract.WithHandler(viewGetEventsForContract),
ViewGetEventsForRequest.WithHandler(viewGetEventsForRequest),
ViewGetRequestIDsForBlock.WithHandler(viewGetRequestIDsForBlock),
ViewGetRequestReceipt.WithHandler(viewGetRequestReceipt),
Expand Down Expand Up @@ -160,18 +158,3 @@ func viewGetEventsForBlock(ctx isc.SandboxView) dict.Dict {
ret.Set(ParamBlockIndex, codec.Encode(blockIndex))
return ret
}

// viewGetEventsForContract returns a list of events for a given smart contract.
// params:
// ParamContractHname - hname of the contract
// ParamFromBlock - defaults to 0
// ParamToBlock - defaults to latest block
func viewGetEventsForContract(ctx isc.SandboxView) dict.Dict {
params := ctx.Params()
contract := params.MustGetHname(ParamContractHname)
fromBlock := params.MustGetUint32(ParamFromBlock, 0)
toBlock := params.MustGetUint32(ParamToBlock, math.MaxUint32)
events := getSmartContractEventsInternal(ctx.StateR(), contract, fromBlock, toBlock)

return eventsToDict(events)
}
1 change: 0 additions & 1 deletion packages/vm/core/blocklog/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ var (
ViewIsRequestProcessed = coreutil.ViewFunc("isRequestProcessed")
ViewGetEventsForRequest = coreutil.ViewFunc("getEventsForRequest")
ViewGetEventsForBlock = coreutil.ViewFunc("getEventsForBlock")
ViewGetEventsForContract = coreutil.ViewFunc("getEventsForContract")
ViewHasUnprocessable = coreutil.ViewFunc("hasUnprocessable")
)

Expand Down
7 changes: 7 additions & 0 deletions packages/vm/core/blocklog/stateaccess.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
package blocklog

import (
"github.com/iotaledger/wasp/packages/isc"
"github.com/iotaledger/wasp/packages/kv"
"github.com/iotaledger/wasp/packages/kv/dict"
"github.com/iotaledger/wasp/packages/kv/subrealm"
)

Expand All @@ -20,3 +22,8 @@ func NewStateAccess(store kv.KVStoreReader) *StateAccess {
func (sa *StateAccess) BlockInfo(blockIndex uint32) (*BlockInfo, bool) {
return GetBlockInfo(sa.state, blockIndex)
}

func (sa *StateAccess) GetSmartContractEvents(contractID isc.Hname, fromBlock, toBlock uint32) dict.Dict {
events := getSmartContractEventsInternal(sa.state, contractID, fromBlock, toBlock)
return eventsToDict(events)
}
8 changes: 4 additions & 4 deletions packages/vm/core/testcore/blob_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"fmt"
"testing"

"github.com/samber/lo"
"github.com/stretchr/testify/require"

"github.com/iotaledger/wasp/packages/hashing"
Expand Down Expand Up @@ -91,8 +92,8 @@ func TestUploadBlob(t *testing.T) {
require.EqualValues(t, 1, len(m))
require.EqualValues(t, len(data), m["field"])
}
ret, err := ch.CallView(blob.Contract.Name, blob.ViewListBlobs.Name)
require.NoError(t, err)

ret := blob.ListBlobs(lo.Must(ch.Store().LatestState()))
require.EqualValues(t, howMany, len(ret))
for _, h := range hashes {
sizeBin := ret.Get(kv.Key(h[:]))
Expand Down Expand Up @@ -162,8 +163,7 @@ func TestUploadWasm(t *testing.T) {
_, err := ch.UploadWasmFromFile(nil, wasmFile)
require.NoError(t, err)

ret, err := ch.CallView(blob.Contract.Name, blob.ViewListBlobs.Name)
require.NoError(t, err)
ret := blob.ListBlobs(lo.Must(ch.Store().LatestState()))
require.EqualValues(t, 1, len(ret))
})
}
Expand Down
13 changes: 5 additions & 8 deletions packages/vm/core/testcore/events_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"math"
"testing"

"github.com/samber/lo"
"github.com/stretchr/testify/require"

iotago "github.com/iotaledger/iota.go/v3"
Expand Down Expand Up @@ -176,14 +177,10 @@ func getEventsForBlock(t *testing.T, chain *solo.Chain, blockNumber ...int32) (e
return events
}

func getEventsForSC(t *testing.T, chain *solo.Chain, fromBlock, toBlock int32) (events []*isc.Event) {
res, err := chain.CallView(blocklog.Contract.Name, blocklog.ViewGetEventsForContract.Name,
blocklog.ParamContractHname, inccounter.Contract.Hname(),
blocklog.ParamFromBlock, fromBlock,
blocklog.ParamToBlock, toBlock,
)
require.NoError(t, err)
events, err = blocklog.EventsFromViewResult(res)
func getEventsForSC(t *testing.T, chain *solo.Chain, fromBlock, toBlock uint32) (events []*isc.Event) {
ret := blocklog.NewStateAccess(lo.Must(chain.Store().LatestState())).
GetSmartContractEvents(inccounter.Contract.Hname(), fromBlock, toBlock)
events, err := blocklog.EventsFromViewResult(ret)
require.NoError(t, err)
return events
}
Expand Down
22 changes: 0 additions & 22 deletions packages/webapi/controllers/corecontracts/accounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,28 +14,6 @@ import (
"github.com/iotaledger/wasp/packages/webapi/params"
)

func (c *Controller) getAccounts(e echo.Context) error {
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
if err != nil {
return c.handleViewCallError(err, chainID)
}

accounts, err := corecontracts.GetAccounts(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
if err != nil {
return c.handleViewCallError(err, chainID)
}

accountsResponse := &models.AccountListResponse{
Accounts: make([]string, len(accounts)),
}

for k, v := range accounts {
accountsResponse.Accounts[k] = v.String()
}

return e.JSON(http.StatusOK, accountsResponse)
}

func (c *Controller) getTotalAssets(e echo.Context) error {
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
if err != nil {
Expand Down
25 changes: 0 additions & 25 deletions packages/webapi/controllers/corecontracts/blob.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,31 +21,6 @@ type BlobListResponse struct {
Blobs []Blob
}

func (c *Controller) listBlobs(e echo.Context) error {
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
if err != nil {
return c.handleViewCallError(err, chainID)
}

blobList, err := corecontracts.ListBlobs(ch, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
if err != nil {
return c.handleViewCallError(err, chainID)
}

blobListResponse := &BlobListResponse{
Blobs: make([]Blob, 0, len(blobList)),
}

for k, v := range blobList {
blobListResponse.Blobs = append(blobListResponse.Blobs, Blob{
Hash: k.Hex(),
Size: v,
})
}

return e.JSON(http.StatusOK, blobListResponse)
}

type BlobValueResponse struct {
ValueData string `json:"valueData" swagger:"required,desc(The blob data (Hex))"`
}
Expand Down
17 changes: 0 additions & 17 deletions packages/webapi/controllers/corecontracts/blocklog.go
Original file line number Diff line number Diff line change
Expand Up @@ -240,23 +240,6 @@ func (c *Controller) getBlockEvents(e echo.Context) error {
return eventsResponse(e, events)
}

func (c *Controller) getContractEvents(e echo.Context) error {
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
if err != nil {
return c.handleViewCallError(err, chainID)
}
contractHname, err := params.DecodeHNameFromHNameHexString(e, "contractHname")
if err != nil {
return err
}

events, err := corecontracts.GetEventsForContract(ch, contractHname, e.QueryParam(params.ParamBlockIndexOrTrieRoot))
if err != nil {
return c.handleViewCallError(err, chainID)
}
return eventsResponse(e, events)
}

func (c *Controller) getRequestEvents(e echo.Context) error {
ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService)
if err != nil {
Expand Down
25 changes: 0 additions & 25 deletions packages/webapi/controllers/corecontracts/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,6 @@ func (c *Controller) handleViewCallError(err error, chainID isc.ChainID) error {
}

func (c *Controller) addAccountContractRoutes(api echoswagger.ApiGroup, mocker interfaces.Mocker) {
api.GET("chains/:chainID/core/accounts", c.getAccounts).
AddParamPath("", params.ParamChainID, params.DescriptionChainID).
AddParamQuery("", params.ParamBlockIndexOrTrieRoot, params.DescriptionBlockIndexOrTrieRoot, false).
AddResponse(http.StatusUnauthorized, "Unauthorized (Wrong permissions, missing token)", authentication.ValidationError{}, nil).
AddResponse(http.StatusOK, "A list of all accounts", mocker.Get(models.AccountListResponse{}), nil).
SetOperationId("accountsGetAccounts").
SetSummary("Get a list of all accounts")

api.GET("chains/:chainID/core/accounts/account/:agentID/balance", c.getAccountBalance).
AddParamPath("", params.ParamChainID, params.DescriptionChainID).
AddParamPath("", params.ParamAgentID, params.DescriptionAgentID).
Expand Down Expand Up @@ -119,14 +111,6 @@ func (c *Controller) addAccountContractRoutes(api echoswagger.ApiGroup, mocker i
}

func (c *Controller) addBlobContractRoutes(api echoswagger.ApiGroup, mocker interfaces.Mocker) {
api.GET("chains/:chainID/core/blobs", c.listBlobs).
AddParamPath("", params.ParamChainID, params.DescriptionChainID).
AddParamQuery("", params.ParamBlockIndexOrTrieRoot, params.DescriptionBlockIndexOrTrieRoot, false).
AddResponse(http.StatusUnauthorized, "Unauthorized (Wrong permissions, missing token)", authentication.ValidationError{}, nil).
AddResponse(http.StatusOK, "All stored blobs", mocker.Get(BlobListResponse{}), nil).
SetOperationId("blobsGetAllBlobs").
SetSummary("Get all stored blobs")

api.GET("chains/:chainID/core/blobs/:blobHash/data/:fieldKey", c.getBlobValue).
AddParamPath("", params.ParamChainID, params.DescriptionChainID).
AddParamPath("", params.ParamBlobHash, params.DescriptionBlobHash).
Expand Down Expand Up @@ -299,15 +283,6 @@ func (c *Controller) addBlockLogContractRoutes(api echoswagger.ApiGroup, mocker
AddResponse(http.StatusOK, "The events", mocker.Get(models.EventsResponse{}), nil).
SetOperationId("blocklogGetEventsOfRequest").
SetSummary("Get events of a request")

api.GET("chains/:chainID/core/blocklog/events/contract/:contractHname", c.getContractEvents).
AddParamPath("", params.ParamChainID, params.DescriptionChainID).
AddParamPath("", params.ParamContractHName, params.DescriptionContractHName).
AddParamQuery("", params.ParamBlockIndexOrTrieRoot, params.DescriptionBlockIndexOrTrieRoot, false).
AddResponse(http.StatusUnauthorized, "Unauthorized (Wrong permissions, missing token)", authentication.ValidationError{}, nil).
AddResponse(http.StatusOK, "The events", mocker.Get(models.EventsResponse{}), nil).
SetOperationId("blocklogGetEventsOfContract").
SetSummary("Get events of a contract")
}

func (c *Controller) RegisterPublic(publicAPI echoswagger.ApiGroup, mocker interfaces.Mocker) {
Expand Down
Loading

0 comments on commit 07d9b86

Please sign in to comment.