diff --git a/daemon/algod/api/algod.oas2.json b/daemon/algod/api/algod.oas2.json index 9c37f8d931..7cb8a6b366 100644 --- a/daemon/algod/api/algod.oas2.json +++ b/daemon/algod/api/algod.oas2.json @@ -1864,8 +1864,8 @@ "get": { "description": "Get ledger deltas for a round.", "tags": [ - "public", - "nonparticipating" + "public", + "nonparticipating" ], "produces": [ "application/json", @@ -4106,6 +4106,10 @@ "fix-signers": { "description": "If true, signers for transactions that are missing signatures will be fixed during evaluation.", "type": "boolean" + }, + "populate-resources": { + "description": "If true, return populated resource arrays for each transaction based on unnamed resources", + "type": "boolean" } } }, @@ -4357,6 +4361,39 @@ } } }, + "ResourceArrays": { + "description": "Resource arrays that are required for a transaction", + "type": "object", + "properties": { + "accounts": { + "type": "array", + "items": { + "type": "string", + "x-algorand-format": "Address" + } + }, + "assets": { + "type": "array", + "items": { + "type": "integer", + "x-algorand-format": "uint64" + } + }, + "apps": { + "type": "array", + "items": { + "type": "integer", + "x-algorand-format": "uint64" + } + }, + "boxes": { + "type": "array", + "items": { + "$ref": "#/definitions/BoxReference" + } + } + } + }, "SimulateTransactionGroupResult": { "description": "Simulation result for an atomic transaction group", "type": "object", @@ -4392,6 +4429,13 @@ }, "unnamed-resources-accessed": { "$ref": "#/definitions/SimulateUnnamedResourcesAccessed" + }, + "extra-resource-arrays": { + "description": "Present if populate-resource-arrays is true in the request and additional transactions are needed to name all the accessed resources.", + "type": "array", + "items": { + "$ref": "#/definitions/ResourceArrays" + } } } }, @@ -4419,10 +4463,14 @@ "unnamed-resources-accessed": { "$ref": "#/definitions/SimulateUnnamedResourcesAccessed" }, - "fixed-signer":{ + "fixed-signer": { "description": "The account that needed to sign this transaction when no signature was provided and the provided signer was incorrect.", "type": "string", "x-algorand-format": "Address" + }, + "populated-resource-arrays": { + "description": "Present if populate-resource-arrays is true in the request. In this case, it will be all of the resources this transaction needs to be evaluated.", + "$ref": "#/definitions/ResourceArrays" } } }, diff --git a/daemon/algod/api/algod.oas3.yml b/daemon/algod/api/algod.oas3.yml index fa5a2b8268..3799054f5e 100644 --- a/daemon/algod/api/algod.oas3.yml +++ b/daemon/algod/api/algod.oas3.yml @@ -2328,6 +2328,39 @@ ], "type": "object" }, + "ResourceArrays": { + "description": "Resource arrays that are required for a transaction", + "properties": { + "accounts": { + "items": { + "type": "string", + "x-algorand-format": "Address" + }, + "type": "array" + }, + "apps": { + "items": { + "type": "integer", + "x-algorand-format": "uint64" + }, + "type": "array" + }, + "assets": { + "items": { + "type": "integer", + "x-algorand-format": "uint64" + }, + "type": "array" + }, + "boxes": { + "items": { + "$ref": "#/components/schemas/BoxReference" + }, + "type": "array" + } + }, + "type": "object" + }, "ScratchChange": { "description": "A write operation into a scratch slot.", "properties": { @@ -2384,6 +2417,10 @@ "description": "If true, signers for transactions that are missing signatures will be fixed during evaluation.", "type": "boolean" }, + "populate-resources": { + "description": "If true, return populated resource arrays for each transaction based on unnamed resources", + "type": "boolean" + }, "round": { "description": "If provided, specifies the round preceding the simulation. State changes through this round will be used to run this simulation. Usually only the 4 most recent rounds will be available (controlled by the node config value MaxAcctLookback). If not specified, defaults to the latest available round.", "type": "integer" @@ -2453,6 +2490,13 @@ "description": "Total budget consumed during execution of app calls in the transaction group.", "type": "integer" }, + "extra-resource-arrays": { + "description": "Present if populate-resource-arrays is true in the request and additional transactions are needed to name all the accessed resources.", + "items": { + "$ref": "#/components/schemas/ResourceArrays" + }, + "type": "array" + }, "failed-at": { "description": "If present, indicates which transaction in this group caused the failure. This array represents the path to the failing transaction. Indexes are zero based, the first element indicates the top-level transaction, and successive elements indicate deeper inner transactions.", "items": { @@ -2499,6 +2543,9 @@ "description": "Budget used during execution of a logic sig transaction.", "type": "integer" }, + "populated-resource-arrays": { + "$ref": "#/components/schemas/ResourceArrays" + }, "txn-result": { "$ref": "#/components/schemas/PendingTransactionResponse" }, diff --git a/daemon/algod/api/server/v2/generated/data/routes.go b/daemon/algod/api/server/v2/generated/data/routes.go index c3fbbd17b4..a2e21bbabe 100644 --- a/daemon/algod/api/server/v2/generated/data/routes.go +++ b/daemon/algod/api/server/v2/generated/data/routes.go @@ -276,67 +276,69 @@ var swaggerSpec = []string{ "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", - "AP//sn63M9oKAQA=", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/daemon/algod/api/server/v2/generated/experimental/routes.go b/daemon/algod/api/server/v2/generated/experimental/routes.go index d8672d7974..99af97b7da 100644 --- a/daemon/algod/api/server/v2/generated/experimental/routes.go +++ b/daemon/algod/api/server/v2/generated/experimental/routes.go @@ -131,233 +131,235 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL var swaggerSpec = []string{ "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", - "AQAA//+DQtmvDAwBAA==", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/daemon/algod/api/server/v2/generated/model/types.go b/daemon/algod/api/server/v2/generated/model/types.go index 52f37b79fc..7f081ae56a 100644 --- a/daemon/algod/api/server/v2/generated/model/types.go +++ b/daemon/algod/api/server/v2/generated/model/types.go @@ -783,6 +783,14 @@ type PendingTransactionResponse struct { Txn map[string]interface{} `json:"txn"` } +// ResourceArrays Resource arrays that are required for a transaction +type ResourceArrays struct { + Accounts *[]string `json:"accounts,omitempty"` + Apps *[]uint64 `json:"apps,omitempty"` + Assets *[]uint64 `json:"assets,omitempty"` + Boxes *[]BoxReference `json:"boxes,omitempty"` +} + // ScratchChange A write operation into a scratch slot. type ScratchChange struct { // NewValue Represents an AVM value. @@ -818,6 +826,9 @@ type SimulateRequest struct { // FixSigners If true, signers for transactions that are missing signatures will be fixed during evaluation. FixSigners *bool `json:"fix-signers,omitempty"` + // PopulateResources If true, return populated resource arrays for each transaction based on unnamed resources + PopulateResources *bool `json:"populate-resources,omitempty"` + // Round If provided, specifies the round preceding the simulation. State changes through this round will be used to run this simulation. Usually only the 4 most recent rounds will be available (controlled by the node config value MaxAcctLookback). If not specified, defaults to the latest available round. Round *uint64 `json:"round,omitempty"` @@ -854,6 +865,9 @@ type SimulateTransactionGroupResult struct { // AppBudgetConsumed Total budget consumed during execution of app calls in the transaction group. AppBudgetConsumed *uint64 `json:"app-budget-consumed,omitempty"` + // ExtraResourceArrays Present if populate-resource-arrays is true in the request and additional transactions are needed to name all the accessed resources. + ExtraResourceArrays *[]ResourceArrays `json:"extra-resource-arrays,omitempty"` + // FailedAt If present, indicates which transaction in this group caused the failure. This array represents the path to the failing transaction. Indexes are zero based, the first element indicates the top-level transaction, and successive elements indicate deeper inner transactions. FailedAt *[]uint64 `json:"failed-at,omitempty"` @@ -881,6 +895,9 @@ type SimulateTransactionResult struct { // LogicSigBudgetConsumed Budget used during execution of a logic sig transaction. LogicSigBudgetConsumed *uint64 `json:"logic-sig-budget-consumed,omitempty"` + // PopulatedResourceArrays Resource arrays that are required for a transaction + PopulatedResourceArrays *ResourceArrays `json:"populated-resource-arrays,omitempty"` + // TxnResult Details about a pending transaction. If the transaction was recently confirmed, includes confirmation details like the round and reward details. TxnResult PendingTransactionResponse `json:"txn-result"` diff --git a/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go b/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go index 03474cebda..52018fe453 100644 --- a/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go +++ b/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go @@ -185,233 +185,236 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL var swaggerSpec = []string{ "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", + "AAD//xjCbNGuFAEA", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go b/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go index 646cd7f8f5..2e8c21376a 100644 --- a/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go +++ b/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go @@ -774,313 +774,315 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "Pv3fAAAA//9NN7DNVcUBAA==", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/daemon/algod/api/server/v2/generated/participating/private/routes.go b/daemon/algod/api/server/v2/generated/participating/private/routes.go index a2757febb7..1c676ed938 100644 --- a/daemon/algod/api/server/v2/generated/participating/private/routes.go +++ b/daemon/algod/api/server/v2/generated/participating/private/routes.go @@ -410,76 +410,78 @@ var swaggerSpec = []string{ "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", - "GB8BAA==", + "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", + "kLzMfGxE1oZtPTl5NPvwfwMAAP//HBRa0KUiAQA=", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/daemon/algod/api/server/v2/generated/participating/public/routes.go b/daemon/algod/api/server/v2/generated/participating/public/routes.go index 878f514137..3fccb3969d 100644 --- a/daemon/algod/api/server/v2/generated/participating/public/routes.go +++ b/daemon/algod/api/server/v2/generated/participating/public/routes.go @@ -177,240 +177,243 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", + "5gI/syY29cnx6eTj/w0AAP//53cdFIonAQA=", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/daemon/algod/api/server/v2/handlers.go b/daemon/algod/api/server/v2/handlers.go index b6d702d008..f79541dc99 100644 --- a/daemon/algod/api/server/v2/handlers.go +++ b/daemon/algod/api/server/v2/handlers.go @@ -1253,6 +1253,7 @@ type PreEncodedSimulateTxnResult struct { TransactionTrace *model.SimulationTransactionExecTrace `codec:"exec-trace,omitempty"` UnnamedResourcesAccessed *model.SimulateUnnamedResourcesAccessed `codec:"unnamed-resources-accessed,omitempty"` FixedSigner *string `codec:"fixed-signer,omitempty"` + PopulatedResourceArrays *model.ResourceArrays `codec:"populated-resource-arrays,omitempty"` } // PreEncodedSimulateTxnGroupResult mirrors model.SimulateTransactionGroupResult @@ -1263,6 +1264,7 @@ type PreEncodedSimulateTxnGroupResult struct { FailureMessage *string `codec:"failure-message,omitempty"` UnnamedResourcesAccessed *model.SimulateUnnamedResourcesAccessed `codec:"unnamed-resources-accessed,omitempty"` Txns []PreEncodedSimulateTxnResult `codec:"txn-results"` + ExtraResourceArrays *[]model.ResourceArrays `codec:"extra-resource-arrays,omitempty"` } // PreEncodedSimulateResponse mirrors model.SimulateResponse @@ -1290,6 +1292,7 @@ type PreEncodedSimulateRequest struct { ExtraOpcodeBudget uint64 `codec:"extra-opcode-budget,omitempty"` ExecTraceConfig simulation.ExecTraceConfig `codec:"exec-trace-config,omitempty"` FixSigners bool `codec:"fix-signers,omitempty"` + PopulateResources bool `codec:"populate-resources,omitempty"` } // SimulateTransaction simulates broadcasting a raw transaction to the network, returning relevant simulation results. diff --git a/daemon/algod/api/server/v2/utils.go b/daemon/algod/api/server/v2/utils.go index a560872a2e..f7f9365df1 100644 --- a/daemon/algod/api/server/v2/utils.go +++ b/daemon/algod/api/server/v2/utils.go @@ -565,10 +565,45 @@ func convertSimulateInitialStates(initialStates *simulation.ResourcesInitialStat } } +// Convert the resources to the model structs +func convertPopulatedResourceArrays(populatedResources simulation.PopulatedResourceArrays) *model.ResourceArrays { + accounts := stringSlice(populatedResources.Accounts) + assets := uint64Slice(populatedResources.Assets) + apps := uint64Slice(populatedResources.Apps) + + boxes := make([]model.BoxReference, len(populatedResources.Boxes)) + for i, box := range populatedResources.Boxes { + boxes[i] = model.BoxReference{ + App: uint64(box.App), + Name: []byte(box.Name), + } + } + + populatedResourceArrays := model.ResourceArrays{ + Accounts: &accounts, + Assets: &assets, + Apps: &apps, + Boxes: &boxes, + } + + return &populatedResourceArrays +} + func convertTxnGroupResult(txnGroupResult simulation.TxnGroupResult) PreEncodedSimulateTxnGroupResult { txnResults := make([]PreEncodedSimulateTxnResult, len(txnGroupResult.Txns)) + + // applCount is used to track the number of app calls in the group so we can correctly determine + // if we need to populate extraResourceArrays (if resource population is enabled) + applCount := 0 for i, txnResult := range txnGroupResult.Txns { + if txnResult.Txn.Txn.Type == protocol.ApplicationCallTx { + applCount++ + } + txnResults[i] = convertTxnResult(txnResult) + if populatedResources, ok := txnGroupResult.PopulatedResourceArrays[i]; ok { + txnResults[i].PopulatedResourceArrays = convertPopulatedResourceArrays(populatedResources) + } } encoded := PreEncodedSimulateTxnGroupResult{ @@ -579,6 +614,16 @@ func convertTxnGroupResult(txnGroupResult simulation.TxnGroupResult) PreEncodedS UnnamedResourcesAccessed: convertUnnamedResourcesAccessed(txnGroupResult.UnnamedResourcesAccessed), } + if len(txnGroupResult.PopulatedResourceArrays)-applCount > 0 { + extraResourceArrays := make([]model.ResourceArrays, len(txnGroupResult.PopulatedResourceArrays)-applCount) + + for i := len(txnResults); i < len(txnGroupResult.PopulatedResourceArrays); i++ { + extraResourceArrays[i-len(txnResults)] = *convertPopulatedResourceArrays(txnGroupResult.PopulatedResourceArrays[i]) + } + + encoded.ExtraResourceArrays = &extraResourceArrays + } + if len(txnGroupResult.FailedAt) > 0 { failedAt := slices.Clone[[]uint64, uint64](txnGroupResult.FailedAt) encoded.FailedAt = &failedAt @@ -624,6 +669,7 @@ func convertSimulationRequest(request PreEncodedSimulateRequest) simulation.Requ ExtraOpcodeBudget: request.ExtraOpcodeBudget, TraceConfig: request.ExecTraceConfig, FixSigners: request.FixSigners, + PopulateResources: request.PopulateResources, } } diff --git a/ledger/simulation/resources.go b/ledger/simulation/resources.go index 2132d20710..af5b90d8ff 100644 --- a/ledger/simulation/resources.go +++ b/ledger/simulation/resources.go @@ -17,8 +17,12 @@ package simulation import ( + "bytes" + "cmp" "fmt" + "maps" "math" + "slices" "github.com/algorand/go-algorand/config" "github.com/algorand/go-algorand/data/basics" @@ -605,3 +609,645 @@ func (p *resourcePolicy) AvailableBox(app basics.AppIndex, name string, operatio } return p.tracker.addBox(app, name, readSize, *p.initialBoxSurplusReadBudget, p.ep.Proto.BytesPerBoxReference) } + +// txnResources tracks the resources being added to a transaction during resource population +type txnResources struct { + // The prefilled resources are resources that were given in the txn group and thus cannot be removed + // The assumption is that these are prefilled because of one of the following reasons: + // - This transaction has already been signed + // - One of the foreign resources is accessed on-chain + prefilledAssets []basics.AssetIndex + prefilledApps []basics.AppIndex + prefilledAccounts []basics.Address + prefilledBoxes []logic.BoxRef + + // The following fields are resources that are available to the transaction group because they were used in a transaction field (like `Sender`) rather than a foreign array. + assetFromField basics.AssetIndex + appFromField basics.AppIndex + accountsFromFields map[basics.Address]struct{} + + // These are the fields currently being populated, thus we can mutate them however we'd like + assets []basics.AssetIndex + apps []basics.AppIndex + boxes []logic.BoxRef + accounts []basics.Address + + maxTotalRefs int + maxAccounts int + maxBoxes int + maxApps int + maxAssets int +} + +func (r *txnResources) getTotalRefs() int { + return len(r.accounts) + len(r.assets) + len(r.apps) + len(r.boxes) + len(r.prefilledAccounts) + len(r.prefilledAssets) + len(r.prefilledApps) + len(r.prefilledBoxes) +} + +// Methods for determining room for specific references + +func (r *txnResources) hasRoom(numRefs int) bool { + return r.getTotalRefs() < r.maxTotalRefs-numRefs+1 +} + +func (r *txnResources) hasRoomForApp() bool { + return r.hasRoom(1) && (len(r.apps)+len(r.prefilledApps)) < r.maxApps +} + +func (r *txnResources) hasRoomForAsset() bool { + return r.hasRoom(1) && (len(r.assets)+len(r.prefilledAssets)) < r.maxAssets +} + +func (r *txnResources) hasRoomForBox() bool { + return r.hasRoom(1) && (len(r.boxes)+len(r.prefilledBoxes)) < r.maxBoxes +} + +func (r *txnResources) hasRoomForAccount() bool { + return r.hasRoom(1) && (len(r.accounts)+len(r.prefilledAccounts)) < r.maxAccounts +} + +func (r *txnResources) hasRoomForHolding() bool { + return r.hasRoom(2) && r.hasRoomForAccount() && r.hasRoomForAsset() +} + +func (r *txnResources) hasRoomForAppLocal() bool { + return r.hasRoom(2) && r.hasRoomForAccount() && r.hasRoomForApp() +} + +func (r *txnResources) hasRoomForBoxWithApp() bool { + return r.hasRoom(2) && r.hasRoomForBox() && r.hasRoomForApp() +} + +// Methods for determining if a resource is available + +func (r *txnResources) hasApp(app basics.AppIndex) bool { + if r.appFromField == app { + return true + } + + if slices.Contains(r.prefilledApps, app) || slices.Contains(r.apps, app) { + return true + } + return false +} + +func (r *txnResources) hasAsset(aid basics.AssetIndex) bool { + if slices.Contains(r.prefilledAssets, aid) || slices.Contains(r.assets, aid) { + return true + } + return r.assetFromField == aid +} + +func (r *txnResources) hasAccount(addr basics.Address) bool { + if _, hasField := r.accountsFromFields[addr]; hasField { + return true + } + + if slices.Contains(r.prefilledAccounts, addr) || slices.Contains(r.accounts, addr) { + return true + } + + if r.appFromField.Address() == addr { + return true + } + + for _, app := range r.apps { + if app.Address() == addr { + return true + } + } + + for _, app := range r.prefilledApps { + if app.Address() == addr { + return true + } + } + + return false +} + +func (r *txnResources) addAccount(addr basics.Address) error { + // The resource tracker *should* not have duplicates like this, but we check here just to be safe + if r.hasAccount(addr) { + return nil + } + + if !r.hasRoomForAccount() { + return fmt.Errorf("no room for account: %s", addr.String()) + } + + r.accounts = append(r.accounts, addr) + return nil +} + +func (r *txnResources) addAsset(aid basics.AssetIndex) error { + // The resource tracker *should* not have duplicates like this, but we check here just to be safe + if r.hasAsset(aid) { + return nil + } + + if !r.hasRoomForAsset() { + return fmt.Errorf("no room for asset: %d", aid) + } + r.assets = append(r.assets, aid) + return nil +} + +func (r *txnResources) addApp(aid basics.AppIndex) error { + // The resource tracker *should* not have duplicates like this, but we check here just to be safe + if r.hasApp(aid) { + return nil + } + + if !r.hasRoomForApp() { + return fmt.Errorf("no room for app: %d", aid) + } + r.apps = append(r.apps, aid) + return nil +} + +// addBox adds a box to the box array. It does NOT add the app to the app array. +func (r *txnResources) addBox(app basics.AppIndex, name string) error { + if !r.hasRoomForBox() { + return fmt.Errorf("no room for box %d : %s", app, name) + } + r.boxes = append(r.boxes, logic.BoxRef{App: app, Name: name}) + return nil +} + +// addBoxWithApp adds a box to the box array. It also adds the app to the app array. +func (r *txnResources) addBoxWithApp(app basics.AppIndex, name string) error { + if !r.hasRoomForBoxWithApp() { + return fmt.Errorf("no room for box %d : %s", app, name) + } + r.boxes = append(r.boxes, logic.BoxRef{App: app, Name: name}) + r.apps = append(r.apps, app) + return nil +} + +func (r *txnResources) addAppLocal(app basics.AppIndex, addr basics.Address) error { + if !r.hasRoomForAppLocal() { + return fmt.Errorf("no room for app local %d : %s", app, addr) + } + + r.apps = append(r.apps, app) + r.accounts = append(r.accounts, addr) + return nil +} + +func (r *txnResources) addAssetHolding(addr basics.Address, aid basics.AssetIndex) error { + if !r.hasRoomForHolding() { + return fmt.Errorf("no room for asset holding %d : %s", aid, addr.String()) + } + + r.accounts = append(r.accounts, addr) + r.assets = append(r.assets, aid) + return nil +} + +func (r *txnResources) addAddressFromField(addr basics.Address) { + if !addr.IsZero() { + r.accountsFromFields[addr] = struct{}{} + } +} + +// PopulatedResourceArrays is a struct that contains all the populated arrays for a txn +type PopulatedResourceArrays struct { + Accounts []basics.Address + Assets []basics.AssetIndex + Apps []basics.AppIndex + Boxes []logic.BoxRef +} + +func (r *txnResources) getPopulatedArrays() PopulatedResourceArrays { + return PopulatedResourceArrays{ + Accounts: slices.Concat(r.prefilledAccounts, r.accounts), + Assets: slices.Concat(r.prefilledAssets, r.assets), + Apps: slices.Concat(r.prefilledApps, r.apps), + Boxes: slices.Concat(r.prefilledBoxes, r.boxes), + } +} + +// resourcePopulator is used to populate app resources for a transaction group +type resourcePopulator struct { + txnResources map[int]*txnResources + appCallIndexes []int + groupSize int +} + +func (p *resourcePopulator) addTransaction(txn transactions.Transaction, groupIndex int, consensusParams config.ConsensusParams) { + p.txnResources[groupIndex] = &txnResources{ + prefilledAssets: []basics.AssetIndex{}, + prefilledApps: []basics.AppIndex{}, + prefilledAccounts: []basics.Address{}, + prefilledBoxes: []logic.BoxRef{}, + accountsFromFields: make(map[basics.Address]struct{}), + + assets: []basics.AssetIndex{}, + apps: []basics.AppIndex{}, + accounts: []basics.Address{}, + boxes: []logic.BoxRef{}, + maxTotalRefs: consensusParams.MaxAppTotalTxnReferences, + maxAccounts: consensusParams.MaxAppTxnAccounts, + maxBoxes: consensusParams.MaxAppBoxReferences, + maxApps: consensusParams.MaxAppTxnForeignApps, + maxAssets: consensusParams.MaxAppTxnForeignAssets, + } + + // The Sender will always be implicitly available for every transaction type + p.txnResources[groupIndex].addAddressFromField(txn.Sender) + + switch txn.Type { + case protocol.ApplicationCallTx: + p.txnResources[groupIndex].prefilledAssets = append(p.txnResources[groupIndex].prefilledAssets, txn.ForeignAssets...) + + p.txnResources[groupIndex].prefilledApps = append(p.txnResources[groupIndex].prefilledApps, txn.ForeignApps...) + + p.txnResources[groupIndex].prefilledAccounts = append(p.txnResources[groupIndex].prefilledAccounts, txn.Accounts...) + + for _, box := range txn.Boxes { + ref := logic.BoxRef{App: txn.ForeignApps[box.Index], Name: string(box.Name)} + p.txnResources[groupIndex].prefilledBoxes = append(p.txnResources[groupIndex].prefilledBoxes, ref) + } + + p.txnResources[groupIndex].appFromField = txn.ApplicationID + + case protocol.AssetTransferTx: + p.txnResources[groupIndex].assetFromField = txn.XferAsset + p.txnResources[groupIndex].addAddressFromField(txn.AssetReceiver) + p.txnResources[groupIndex].addAddressFromField(txn.AssetCloseTo) + p.txnResources[groupIndex].addAddressFromField(txn.AssetSender) + + case protocol.PaymentTx: + p.txnResources[groupIndex].addAddressFromField(txn.Receiver) + p.txnResources[groupIndex].addAddressFromField(txn.CloseRemainderTo) + + case protocol.AssetConfigTx: + p.txnResources[groupIndex].assetFromField = txn.ConfigAsset + + case protocol.AssetFreezeTx: + p.txnResources[groupIndex].assetFromField = txn.FreezeAsset + p.txnResources[groupIndex].addAddressFromField(txn.FreezeAccount) + } +} + +func (p *resourcePopulator) addAccount(addr basics.Address) error { + // If another txn has the account, do nothing + // This should never happen because the logic in EvalContext should + // prevent duplicate resources in the tracker, but we check here just to be safe + for _, txn := range p.txnResources { + if txn.hasAccount(addr) { + return nil + } + } + + var err error + for _, i := range p.appCallIndexes { + err = p.txnResources[i].addAccount(addr) + if err == nil { + return nil + } + } + + return err +} + +func (p *resourcePopulator) addAsset(asset basics.AssetIndex) error { + // If another txn has the asset, do nothing + // This should never happen because the logic in EvalContext should + // prevent duplicate resources in the tracker, but we check here just to be safe + for _, txn := range p.txnResources { + if txn.hasAsset(asset) { + return nil + } + } + + var err error + for _, i := range p.appCallIndexes { + err = p.txnResources[i].addAsset(asset) + if err == nil { + return nil + } + } + + return err +} + +func (p *resourcePopulator) addApp(app basics.AppIndex) error { + // If another txn has the app, do nothing + // This should never happen because the logic in EvalContext should + // prevent duplicate resources in the tracker, but we check here just to be safe + for _, txn := range p.txnResources { + if txn.hasApp(app) { + return nil + } + } + + var err error + for _, i := range p.appCallIndexes { + err = p.txnResources[i].addApp(app) + if err == nil { + return nil + } + } + return err +} + +// addEmptyBox adds an empty box (appID=0, name="") to a transaction in the populator +func (p *resourcePopulator) addEmptyBox() error { + var err error + + for _, i := range p.appCallIndexes { + err = p.txnResources[i].addBox(basics.AppIndex(0), "") + if err == nil { + return nil + } + } + + return err +} + +// addBox adds a box to a txn in the resource populator. The app passed should never be zero, +// since the boxes from simulate will always have a "hydrated" app ID +func (p *resourcePopulator) addBox(app basics.AppIndex, name string) error { + var err error + + // First try to find txn with app already available + for _, i := range p.appCallIndexes { + if p.txnResources[i].hasApp(app) { + err = p.txnResources[i].addBox(app, name) + if err == nil { + return nil + } + } + } + + // Then try to find txn with room for both app and box + for _, i := range p.appCallIndexes { + err = p.txnResources[i].addBoxWithApp(app, name) + if err == nil { + return nil + } + } + + return err +} + +func (p *resourcePopulator) addHolding(addr basics.Address, aid basics.AssetIndex) error { + var err error + + // First try to find txn with account already available that can also accommodate the asset. + for _, i := range p.appCallIndexes { + if p.txnResources[i].hasAccount(addr) { + err = p.txnResources[i].addAsset(aid) + if err == nil { + return nil + } + } + } + + // Then try to find txn with asset already available that can also accommodate the account. + for _, i := range p.appCallIndexes { + if p.txnResources[i].hasAsset(aid) { + err = p.txnResources[i].addAccount(addr) + if err == nil { + return nil + } + } + } + + // Finally try to find txn with room for both account and holding + for _, i := range p.appCallIndexes { + err = p.txnResources[i].addAssetHolding(addr, aid) + if err == nil { + return nil + } + } + + return err +} + +func (p *resourcePopulator) addLocal(addr basics.Address, aid basics.AppIndex) error { + var err error + + // First try to find txn with account already available that can also accommodate the app. + for _, i := range p.appCallIndexes { + if p.txnResources[i].hasAccount(addr) { + err = p.txnResources[i].addApp(aid) + if err == nil { + return nil + } + } + } + + // Then try to find txn with app already available that can also accommodate the account. + for _, i := range p.appCallIndexes { + if p.txnResources[i].hasApp(aid) { + err = p.txnResources[i].addAccount(addr) + if err == nil { + return nil + } + } + } + + // Finally try to find txn with room for both account and app + for _, i := range p.appCallIndexes { + err = p.txnResources[i].addAppLocal(aid, addr) + if err == nil { + return nil + } + } + + return err +} + +func (p *resourcePopulator) populateResources(groupResourceTracker ResourceTracker, txnResources []ResourceTracker) error { + // We don't want to mutate the groupResourceTracker because it is used later in simulate for UnnamedResourcesAccessed + groupApps := slices.Sorted(maps.Keys(groupResourceTracker.Apps)) + + groupAccounts := slices.SortedFunc(maps.Keys(groupResourceTracker.Accounts), func(a, b basics.Address) int { + return bytes.Compare(a[:], b[:]) + }) + + // Sort boxes by app first and then name + groupBoxes := slices.SortedFunc(maps.Keys(groupResourceTracker.Boxes), func(a, b logic.BoxRef) int { + return cmp.Or(cmp.Compare(b.App, a.App), cmp.Compare(a.Name, b.Name)) + }) + + // Sort assets holdings by account first and then asset + groupAssetHoldings := slices.SortedFunc(maps.Keys(groupResourceTracker.AssetHoldings), func(a, b ledgercore.AccountAsset) int { + return cmp.Or(cmp.Compare(a.Address.GetUserAddress(), b.Address.GetUserAddress()), cmp.Compare(a.Asset, b.Asset)) + }) + + // Sort app locals by account first and then app + groupAppLocals := slices.SortedFunc(maps.Keys(groupResourceTracker.AppLocals), func(a, b ledgercore.AccountApp) int { + return cmp.Or(cmp.Compare(a.Address.GetUserAddress(), b.Address.GetUserAddress()), cmp.Compare(a.App, b.App)) + }) + + groupAssets := slices.Sorted(maps.Keys(groupResourceTracker.Assets)) + + // First populate resources that HAVE to be assigned to a specific transaction + for i, tracker := range txnResources { + sortedAssets := slices.Sorted(maps.Keys(tracker.Assets)) + sortedApps := slices.Sorted(maps.Keys(tracker.Apps)) + sortedAccounts := slices.SortedFunc(maps.Keys(tracker.Accounts), func(a, b basics.Address) int { + return bytes.Compare(a[:], b[:]) + }) + + for _, asset := range sortedAssets { + err := p.txnResources[i].addAsset(asset) + if err != nil { + return err + } + } + + for _, app := range sortedApps { + err := p.txnResources[i].addApp(app) + if err != nil { + return err + } + } + + for _, account := range sortedAccounts { + err := p.txnResources[i].addAccount(account) + if err != nil { + return err + } + } + } + + // Then assign cross-reference resources because they have the most strict requirements (one account and another resource) + for _, holding := range groupAssetHoldings { + err := p.addHolding(holding.Address, holding.Asset) + if err != nil { + return err + } + + // Remove the resources from the global tracker in case they were added separately + groupAssets = slices.DeleteFunc(groupAssets, func(a basics.AssetIndex) bool { + return a == holding.Asset + }) + groupAccounts = slices.DeleteFunc(groupAccounts, func(a basics.Address) bool { + return a == holding.Address + }) + } + + for _, local := range groupAppLocals { + err := p.addLocal(local.Address, local.App) + if err != nil { + return err + } + + // Remove the resources from the global tracker in case they were added separately + groupApps = slices.DeleteFunc(groupApps, func(a basics.AppIndex) bool { + return a == local.App + }) + groupAccounts = slices.DeleteFunc(groupAccounts, func(a basics.Address) bool { + return a == local.Address + }) + } + + // Then assign boxes because they can take up to two slots + for _, box := range groupBoxes { + err := p.addBox(box.App, box.Name) + if err != nil { + return err + } + + // Remove the app from the global tracker in case it was added separately + groupApps = slices.DeleteFunc(groupApps, func(a basics.AppIndex) bool { + return a == box.App + }) + } + + // Then assign accounts because they have a lower limit than other resources + for _, account := range groupAccounts { + err := p.addAccount(account) + if err != nil { + return err + } + } + + // Finally assign the remaining resources which just require one slot + for _, app := range groupApps { + err := p.addApp(app) + if err != nil { + return err + } + } + + for _, asset := range groupAssets { + err := p.addAsset(asset) + if err != nil { + return err + } + } + + for range groupResourceTracker.NumEmptyBoxRefs { + err := p.addEmptyBox() + if err != nil { + return err + } + } + + return nil +} + +func (p *resourcePopulator) getPopulatedArrays() map[int]PopulatedResourceArrays { + populatedArrays := map[int]PopulatedResourceArrays{} + for _, i := range p.appCallIndexes { + resources := p.txnResources[i] + if resources == nil { + continue + } + + pop := resources.getPopulatedArrays() + + // The resource populator may populate extra "txns" beyond the group size to tell the caller + // that more transactions are needed to get all available resources. Once we hit completely + // empty resource arrays, we know we can stop because there won't be any more resources + // required + if i >= p.groupSize && len(pop.Accounts)+len(pop.Assets)+len(pop.Apps)+len(pop.Boxes) == 0 { + break + } + populatedArrays[i] = resources.getPopulatedArrays() + } + return populatedArrays +} + +// makeResourcePopulator creates a ResourcePopulator from a transaction group +func makeResourcePopulator(txnGroup []transactions.SignedTxn, consensusParams config.ConsensusParams) resourcePopulator { + populator := resourcePopulator{ + txnResources: map[int]*txnResources{}, + appCallIndexes: []int{}, + groupSize: len(txnGroup), + } + + for i, txn := range txnGroup { + populator.addTransaction(txn.Txn, i, consensusParams) + if txn.Txn.Type == protocol.ApplicationCallTx { + populator.appCallIndexes = append(populator.appCallIndexes, i) + } + } + + for i := len(txnGroup); i < consensusParams.MaxTxGroupSize; i++ { + populator.appCallIndexes = append(populator.appCallIndexes, i) + populator.txnResources[i] = &txnResources{ + prefilledAssets: []basics.AssetIndex{}, + prefilledApps: []basics.AppIndex{}, + prefilledAccounts: []basics.Address{}, + prefilledBoxes: []logic.BoxRef{}, + accountsFromFields: make(map[basics.Address]struct{}), + assets: []basics.AssetIndex{}, + apps: []basics.AppIndex{}, + accounts: []basics.Address{}, + boxes: []logic.BoxRef{}, + maxTotalRefs: consensusParams.MaxAppTotalTxnReferences, + maxAccounts: consensusParams.MaxAppTxnAccounts, + maxBoxes: consensusParams.MaxAppBoxReferences, + maxAssets: consensusParams.MaxAppTxnForeignAssets, + maxApps: consensusParams.MaxAppTxnForeignApps, + } + } + + return populator +} diff --git a/ledger/simulation/resources_test.go b/ledger/simulation/resources_test.go index 0970b6eb54..1f1634170e 100644 --- a/ledger/simulation/resources_test.go +++ b/ledger/simulation/resources_test.go @@ -23,6 +23,7 @@ import ( "github.com/algorand/go-algorand/data/basics" "github.com/algorand/go-algorand/data/transactions" "github.com/algorand/go-algorand/data/transactions/logic" + "github.com/algorand/go-algorand/ledger/ledgercore" "github.com/algorand/go-algorand/protocol" "github.com/algorand/go-algorand/test/partitiontest" "github.com/stretchr/testify/require" @@ -296,3 +297,490 @@ func TestGlobalVsLocalResources(t *testing.T) { }, groupAssignment.localTxnResources[2].Apps) }) } + +func TestPopulatorWithLocalResources(t *testing.T) { + partitiontest.PartitionTest(t) + t.Parallel() + + txns := make([]transactions.SignedTxn, 1) + txns[0].Txn.Type = protocol.ApplicationCallTx + + consensusParams := config.Consensus[protocol.ConsensusCurrentVersion] + populator := makeResourcePopulator(txns, consensusParams) + + txnResources := make([]ResourceTracker, 1) + + // Note we don't need to test a box here since it will never be a local txn resource + addr := basics.Address{1, 1, 1} + app := basics.AppIndex(12345) + asset := basics.AssetIndex(12345) + + txnResources[0].Accounts = make(map[basics.Address]struct{}) + txnResources[0].Assets = make(map[basics.AssetIndex]struct{}) + txnResources[0].Apps = make(map[basics.AppIndex]struct{}) + + txnResources[0].Accounts[addr] = struct{}{} + txnResources[0].Assets[asset] = struct{}{} + txnResources[0].Apps[app] = struct{}{} + + err := populator.populateResources(ResourceTracker{}, txnResources) + require.NoError(t, err) + + require.Len(t, populator.getPopulatedArrays(), 1) + + require.Equal( + t, + PopulatedResourceArrays{ + Assets: []basics.AssetIndex{asset}, + Apps: []basics.AppIndex{app}, + Accounts: []basics.Address{addr}, + Boxes: nil, + }, + populator.txnResources[0].getPopulatedArrays(), + ) +} + +func TestPopulatorWithGlobalResources(t *testing.T) { + partitiontest.PartitionTest(t) + t.Parallel() + + txns := make([]transactions.SignedTxn, 4) + txns[0].Txn.Type = protocol.PaymentTx // include payment to ensure it doesn't get resources + txns[1].Txn.Type = protocol.ApplicationCallTx + txns[2].Txn.Type = protocol.ApplicationCallTx + txns[3].Txn.Type = protocol.ApplicationCallTx + + app1 := basics.AppIndex(1) + txns[3].Txn.ApplicationID = app1 + + consensusParams := config.Consensus[protocol.ConsensusCurrentVersion] + populator := makeResourcePopulator(txns, consensusParams) + + txnResources := make([]ResourceTracker, 3) + groupResources := ResourceTracker{} + + // Resources + addr2 := basics.Address{2} + app3 := basics.AppIndex(3) + asset4 := basics.AssetIndex(4) + app5 := basics.AppIndex(5) + box5 := logic.BoxRef{App: app5, Name: "box"} + addr6 := basics.Address{6} + asa7 := basics.AssetIndex(7) + box1 := logic.BoxRef{App: app1, Name: "box"} + app1Addr := app1.Address() + asa8 := basics.AssetIndex(8) + addr9 := basics.Address{9} + addr10 := basics.Address{10} + app11 := basics.AppIndex(11) + app12 := basics.AppIndex(12) + addr13 := basics.Address{13} + emptyBox := logic.BoxRef{App: 0, Name: ""} + + // Holdings + holding6_7 := ledgercore.AccountAsset{Address: addr6, Asset: asa7} // new addr and asa + holding1_8 := ledgercore.AccountAsset{Address: app1Addr, Asset: asa8} // new asa + holding9_8 := ledgercore.AccountAsset{Address: addr9, Asset: asa8} // new addr + + // Locals + local10_11 := ledgercore.AccountApp{Address: addr10, App: app11} // new addr and app + local1_12 := ledgercore.AccountApp{Address: app1Addr, App: app12} // new app + local13_1 := ledgercore.AccountApp{Address: addr13, App: app1} // new addr + + groupResources.Accounts = make(map[basics.Address]struct{}) + groupResources.Assets = make(map[basics.AssetIndex]struct{}) + groupResources.Apps = make(map[basics.AppIndex]struct{}) + groupResources.Boxes = make(map[logic.BoxRef]uint64) + groupResources.AssetHoldings = make(map[ledgercore.AccountAsset]struct{}) + groupResources.AppLocals = make(map[ledgercore.AccountApp]struct{}) + + groupResources.Accounts[addr2] = struct{}{} + groupResources.Assets[asset4] = struct{}{} + groupResources.Apps[app3] = struct{}{} + groupResources.Boxes[box1] = 1 + groupResources.Boxes[box5] = 1 + groupResources.AssetHoldings[holding6_7] = struct{}{} + groupResources.AssetHoldings[holding1_8] = struct{}{} + groupResources.AssetHoldings[holding9_8] = struct{}{} + groupResources.AppLocals[local10_11] = struct{}{} + groupResources.AppLocals[local1_12] = struct{}{} + groupResources.AppLocals[local13_1] = struct{}{} + + // These resources should not have an effect on the population because they are inlcuded in a cross-reference or box + groupResources.Apps[app12] = struct{}{} // app from appLocal + groupResources.Accounts[addr10] = struct{}{} // addr from appLocal + groupResources.Accounts[addr6] = struct{}{} // addr from holding + groupResources.Assets[asa7] = struct{}{} // asa from holding + groupResources.Apps[app5] = struct{}{} // app from box + + groupResources.NumEmptyBoxRefs = 11 + + err := populator.populateResources(groupResources, txnResources) + require.NoError(t, err) + require.Equal(t, consensusParams.MaxTxGroupSize, len(populator.txnResources)) + + pop1 := populator.txnResources[1].getPopulatedArrays() + pop2 := populator.txnResources[2].getPopulatedArrays() + pop3 := populator.txnResources[3].getPopulatedArrays() + pop4 := populator.txnResources[4].getPopulatedArrays() + + // Txn 1 has all the cross-reference resources because they are added first + // The exception is the cross-refs for app1 since txn 3 is calling app 1 + require.ElementsMatch(t, pop1.Apps, []basics.AppIndex{box5.App, local10_11.App}) + require.ElementsMatch(t, pop1.Boxes, []logic.BoxRef{box5}) + require.ElementsMatch(t, pop1.Accounts, []basics.Address{holding6_7.Address, holding9_8.Address, local10_11.Address}) + require.ElementsMatch(t, pop1.Assets, []basics.AssetIndex{holding6_7.Asset, holding1_8.Asset}) + + // Txn 2 has the non cross-reference resources and empty boxes + require.ElementsMatch(t, pop2.Apps, []basics.AppIndex{app3}) + require.ElementsMatch(t, pop2.Boxes, []logic.BoxRef{emptyBox, emptyBox, emptyBox, emptyBox, emptyBox}) + require.ElementsMatch(t, pop2.Accounts, []basics.Address{addr2}) + require.ElementsMatch(t, pop2.Assets, []basics.AssetIndex{asset4}) + + // Txn 3 has the cross refs for app1 since it is a call to app1 + require.ElementsMatch(t, pop3.Apps, []basics.AppIndex{local1_12.App}) + require.ElementsMatch(t, pop3.Boxes, []logic.BoxRef{box1, emptyBox, emptyBox, emptyBox, emptyBox}) + require.ElementsMatch(t, pop3.Accounts, []basics.Address{local13_1.Address}) + require.ElementsMatch(t, pop3.Assets, []basics.AssetIndex{holding1_8.Asset}) + + // The 4th populated array does not map to a transaction, but it will contain the overflow of resources + require.Empty(t, pop4.Accounts) + require.Empty(t, pop4.Apps) + require.Empty(t, pop4.Assets) + require.ElementsMatch(t, pop4.Boxes, []logic.BoxRef{emptyBox, emptyBox}) + + require.Len(t, populator.getPopulatedArrays(), 4) + + // The rest of the populated arrays should be empty + for i := 5; i < consensusParams.MaxTxGroupSize; i++ { + require.Empty(t, populator.txnResources[i].getPopulatedArrays().Accounts) + require.Empty(t, populator.txnResources[i].getPopulatedArrays().Apps) + require.Empty(t, populator.txnResources[i].getPopulatedArrays().Assets) + require.Empty(t, populator.txnResources[i].getPopulatedArrays().Boxes) + } +} + +// TestPopulatorWithAlreadyAvailableResources ensures that resources that are already available +// aren't added again. Most of these scenarios are impossible to even occur due to the checks in +// EvalContext before resources are added to the resource tracker. +func TestPopulatorWithAlreadyAvailableResources(t *testing.T) { + partitiontest.PartitionTest(t) + t.Parallel() + + app1 := basics.AppIndex(1) + app2 := basics.AppIndex(2) + addr3 := basics.Address{3} + app4 := basics.AppIndex(4) + box4 := logic.BoxRef{App: app4, Name: "box"} + app5 := basics.AppIndex(5) + addr6 := basics.Address{6} + asa7 := basics.AssetIndex(7) + app8 := basics.AppIndex(8) + app9 := basics.AppIndex(9) + addr10 := basics.Address{10} + asa11 := basics.AssetIndex(11) + + payRecv := basics.Address{12} + payClose := basics.Address{13} + + axferSender := basics.Address{14} + axferReceiver := basics.Address{15} + axferClose := basics.Address{16} + axferAsa := basics.AssetIndex(17) + + acfgAsa := basics.AssetIndex(18) + + afrzAsa := basics.AssetIndex(19) + afrzAddr := basics.Address{20} + + txns := make([]transactions.SignedTxn, 6) + txns[0].Txn.Type = protocol.ApplicationCallTx + txns[0].Txn.ApplicationID = app1 + txns[0].Txn.Sender = addr3 + txns[0].Txn.ForeignApps = []basics.AppIndex{app2} + + txns[1].Txn.Type = protocol.ApplicationCallTx + txns[1].Txn.ApplicationID = app8 + txns[1].Txn.ForeignApps = []basics.AppIndex{app9} + txns[1].Txn.Accounts = []basics.Address{addr10} + txns[1].Txn.ForeignAssets = []basics.AssetIndex{asa11} + + txns[2].Txn.Type = protocol.PaymentTx + txns[2].Txn.Receiver = payRecv + txns[2].Txn.CloseRemainderTo = payClose + + txns[3].Txn.Type = protocol.AssetTransferTx + txns[3].Txn.AssetSender = axferSender + txns[3].Txn.AssetReceiver = axferReceiver + txns[3].Txn.AssetCloseTo = axferClose + txns[3].Txn.XferAsset = axferAsa + + txns[4].Txn.Type = protocol.AssetConfigTx + txns[4].Txn.ConfigAsset = acfgAsa + + txns[5].Txn.Type = protocol.AssetFreezeTx + txns[5].Txn.FreezeAsset = afrzAsa + txns[5].Txn.FreezeAccount = afrzAddr + + consensusParams := config.Consensus[protocol.ConsensusCurrentVersion] + populator := makeResourcePopulator(txns, consensusParams) + + txnResources := make([]ResourceTracker, 1) + groupResources := ResourceTracker{} + + txnResources[0].Apps = make(map[basics.AppIndex]struct{}) + txnResources[0].Accounts = make(map[basics.Address]struct{}) + txnResources[0].Assets = make(map[basics.AssetIndex]struct{}) + groupResources.Assets = make(map[basics.AssetIndex]struct{}) + groupResources.Apps = make(map[basics.AppIndex]struct{}) + groupResources.Accounts = make(map[basics.Address]struct{}) + groupResources.Boxes = make(map[logic.BoxRef]uint64) + + ///////////// + // App tests + ///////////// + + // Ensure the apps own appID isn't added + txnResources[0].Apps[app1] = struct{}{} + + // Ensure an app in the app array isn't added + txnResources[0].Apps[app2] = struct{}{} + + // Ensure an app from a box ref isn't added twice + groupResources.Boxes[box4] = 1 + groupResources.Apps[app4] = struct{}{} + + // Ensure an app from group and txn isn't added twice + txnResources[0].Apps[app5] = struct{}{} + groupResources.Apps[app5] = struct{}{} + + // Ensure an app from another txn field isn't added + groupResources.Apps[app8] = struct{}{} + + // Ensure an app from anothers txn foreign apps isn't added + groupResources.Apps[app9] = struct{}{} + + //////////////// + // Account tests + //////////////// + + // Ensure a txn's sender isn't added + txnResources[0].Accounts[addr3] = struct{}{} + + // Ensure an appl's own app address isn't added + txnResources[0].Accounts[app1.Address()] = struct{}{} + + // Ensure an available app's account isn't added + txnResources[0].Accounts[app2.Address()] = struct{}{} + + // Ensure an account from group and txn isn't added twice + txnResources[0].Accounts[addr6] = struct{}{} + groupResources.Accounts[addr6] = struct{}{} + + // Ensure an app address from another field isn't added + groupResources.Accounts[app8.Address()] = struct{}{} + + // Ensure an app address from another txns foreign apps isn't added + groupResources.Accounts[app9.Address()] = struct{}{} + + // Ensure an address from an appl accounts array isn't added + groupResources.Accounts[addr10] = struct{}{} + + // Ensure addresses from a pay txns fields aren't added + groupResources.Accounts[payRecv] = struct{}{} + groupResources.Accounts[payClose] = struct{}{} + + // // Ensure addresses from a axfer fields aren't added + groupResources.Accounts[axferSender] = struct{}{} + groupResources.Accounts[axferReceiver] = struct{}{} + groupResources.Accounts[axferClose] = struct{}{} + + // Ensure a afrz account isn't added + groupResources.Accounts[afrzAddr] = struct{}{} + + ////////////// + // Asset Tests + ////////////// + + // Ensure an asset from group and txn isn't added twice + txnResources[0].Assets[asa7] = struct{}{} + groupResources.Assets[asa7] = struct{}{} + + // Ensure an sset from an appls assets array isn't added + groupResources.Assets[asa11] = struct{}{} + + // Ensure an asset from an axfer isn't added + groupResources.Assets[axferAsa] = struct{}{} + + // Ensure an asset from an axfg isn't added + groupResources.Assets[acfgAsa] = struct{}{} + + // Ensure an afrz asset isn't added + groupResources.Assets[afrzAsa] = struct{}{} + + err := populator.populateResources(groupResources, txnResources) + require.NoError(t, err) + + populatedArrays := populator.getPopulatedArrays() + require.Len(t, populatedArrays, 2) + + require.ElementsMatch(t, txns[1].Txn.ForeignApps, populatedArrays[1].Apps) + require.ElementsMatch(t, txns[1].Txn.Accounts, populatedArrays[1].Accounts) + require.ElementsMatch(t, txns[1].Txn.ForeignAssets, populatedArrays[1].Assets) + require.ElementsMatch(t, txns[1].Txn.Boxes, populatedArrays[1].Boxes) + + for i := 2; i < len(populatedArrays); i++ { + require.Empty(t, populatedArrays[i].Accounts) + require.Empty(t, populatedArrays[i].Assets) + require.Empty(t, populatedArrays[i].Apps) + require.Empty(t, populatedArrays[i].Boxes) + } + + expectedAssets := []basics.AssetIndex{asa7} + expectedApps := []basics.AppIndex{app5, app4, app2} + expectedAccounts := []basics.Address{addr6} + expectedBoxes := []logic.BoxRef{box4} + + populatedAssets := populatedArrays[0].Assets + populatedApps := populatedArrays[0].Apps + populatedAccounts := populatedArrays[0].Accounts + populatedBoxes := populatedArrays[0].Boxes + + require.ElementsMatch(t, expectedAssets, populatedAssets) + require.ElementsMatch(t, expectedApps, populatedApps) + require.ElementsMatch(t, expectedAccounts, populatedAccounts) + require.ElementsMatch(t, expectedBoxes, populatedBoxes) +} + +func makeFullGroupWithPopulator() (groupResources ResourceTracker, txnResources []ResourceTracker, populator resourcePopulator) { + + txns := make([]transactions.SignedTxn, 16) + txns[0].Txn.Type = protocol.ApplicationCallTx + txns[0].Txn.ForeignApps = make([]basics.AppIndex, 8) + for i := 0; i < 8; i++ { + txns[0].Txn.ForeignApps[i] = basics.AppIndex(i) + } + + consensusParams := config.Consensus[protocol.ConsensusCurrentVersion] + populator = makeResourcePopulator(txns, consensusParams) + txnResources = make([]ResourceTracker, 1) + groupResources = ResourceTracker{} + + txnResources[0].Apps = make(map[basics.AppIndex]struct{}) + txnResources[0].Accounts = make(map[basics.Address]struct{}) + txnResources[0].Assets = make(map[basics.AssetIndex]struct{}) + groupResources.Assets = make(map[basics.AssetIndex]struct{}) + groupResources.Apps = make(map[basics.AppIndex]struct{}) + groupResources.Accounts = make(map[basics.Address]struct{}) + groupResources.Boxes = make(map[logic.BoxRef]uint64) + groupResources.AssetHoldings = make(map[ledgercore.AccountAsset]struct{}) + groupResources.AppLocals = make(map[ledgercore.AccountApp]struct{}) + + return +} + +func TestPopulatorWithNoRoom(t *testing.T) { + partitiontest.PartitionTest(t) + t.Parallel() + + app := basics.AppIndex(1337) + addr := basics.Address{137} + asset := basics.AssetIndex(1337) + box := logic.BoxRef{App: app, Name: "box"} + assetHolding := ledgercore.AccountAsset{Address: addr, Asset: asset} + appLocal := ledgercore.AccountApp{Address: addr, App: app} + + // Txn resources + + groupResources, txnResources, populator := makeFullGroupWithPopulator() + txnResources[0].Apps[app] = struct{}{} + require.ErrorContains(t, populator.populateResources(groupResources, txnResources), "no room for app: 1337") + + groupResources, txnResources, populator = makeFullGroupWithPopulator() + txnResources[0].Accounts[addr] = struct{}{} + require.ErrorContains(t, populator.populateResources(groupResources, txnResources), "no room for account: REAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFN3OBE4") + + groupResources, txnResources, populator = makeFullGroupWithPopulator() + txnResources[0].Assets[asset] = struct{}{} + require.ErrorContains(t, populator.populateResources(groupResources, txnResources), "no room for asset: 1337") + + // Group resources + + groupResources, txnResources, populator = makeFullGroupWithPopulator() + groupResources.Apps[app] = struct{}{} + require.ErrorContains(t, populator.populateResources(groupResources, txnResources), "no room for app: 1337") + + groupResources, txnResources, populator = makeFullGroupWithPopulator() + groupResources.Accounts[addr] = struct{}{} + require.ErrorContains(t, populator.populateResources(groupResources, txnResources), "no room for account: REAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFN3OBE4") + + groupResources, txnResources, populator = makeFullGroupWithPopulator() + groupResources.Assets[asset] = struct{}{} + require.ErrorContains(t, populator.populateResources(groupResources, txnResources), "no room for asset: 1337") + + // Cross ref resources + + groupResources, txnResources, populator = makeFullGroupWithPopulator() + groupResources.Boxes[box] = 1 + require.ErrorContains(t, populator.populateResources(groupResources, txnResources), "no room for box 1337 : box") + + groupResources, txnResources, populator = makeFullGroupWithPopulator() + groupResources.AssetHoldings[assetHolding] = struct{}{} + require.ErrorContains(t, populator.populateResources(groupResources, txnResources), "no room for asset holding 1337 : REAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFN3OBE4") + + groupResources, txnResources, populator = makeFullGroupWithPopulator() + groupResources.AppLocals[appLocal] = struct{}{} + require.ErrorContains(t, populator.populateResources(groupResources, txnResources), "no room for app local 1337 : REAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFN3OBE4") + + groupResources, txnResources, populator = makeFullGroupWithPopulator() + groupResources.NumEmptyBoxRefs = 1 + require.ErrorContains(t, populator.populateResources(groupResources, txnResources), "no room for box 0 : ") +} + +func TestGetTotalRefs(t *testing.T) { + partitiontest.PartitionTest(t) + t.Parallel() + + prefilledApp := basics.AppIndex(1337) + prefilledAccount := basics.Address{137} + prefilledAsset := basics.AssetIndex(1337) + prefilledBox := transactions.BoxRef{Index: uint64(0), Name: []byte("box")} + + unnamedApp := basics.AppIndex(7331) + unnamedAccount := basics.Address{37} + unnamedAsset := basics.AssetIndex(7331) + + txns := make([]transactions.SignedTxn, 1) + txns[0].Txn.Type = protocol.ApplicationCallTx + txns[0].Txn.Accounts = []basics.Address{prefilledAccount} + txns[0].Txn.ForeignApps = []basics.AppIndex{prefilledApp} + txns[0].Txn.ForeignAssets = []basics.AssetIndex{prefilledAsset} + txns[0].Txn.Boxes = []transactions.BoxRef{prefilledBox} + + txnResources := make([]ResourceTracker, 1) + groupResources := ResourceTracker{} + + txnResources[0].Apps = make(map[basics.AppIndex]struct{}) + txnResources[0].Accounts = make(map[basics.Address]struct{}) + txnResources[0].Assets = make(map[basics.AssetIndex]struct{}) + txnResources[0].Apps[unnamedApp] = struct{}{} + txnResources[0].Accounts[unnamedAccount] = struct{}{} + txnResources[0].Assets[unnamedAsset] = struct{}{} + + // 1 of these will go into the first txn + // The other will go into the second txn + groupResources.NumEmptyBoxRefs = 2 + + consensusParams := config.Consensus[protocol.ConsensusCurrentVersion] + populator := makeResourcePopulator(txns, consensusParams) + + err := populator.populateResources(groupResources, txnResources) + require.NoError(t, err) + + // Make sure all named and unnamed resources are accounted for + require.Equal(t, 8, populator.txnResources[0].getTotalRefs()) + + // Make sure the empty box refs are accounted for + require.Equal(t, 1, populator.txnResources[1].getTotalRefs()) + +} diff --git a/ledger/simulation/simulation_eval_test.go b/ledger/simulation/simulation_eval_test.go index c2b1b64726..767d050bd7 100644 --- a/ledger/simulation/simulation_eval_test.go +++ b/ledger/simulation/simulation_eval_test.go @@ -9354,3 +9354,422 @@ func TestFixSigners(t *testing.T) { }) }) } + +func populateResourceTest(t *testing.T, groupSharing bool) { + + var programVersion int + if groupSharing { + programVersion = 9 + } else { + programVersion = 8 + } + + env := simulationtesting.PrepareSimulatorTest(t) + + sender := env.Accounts[0] + foreignAccount := env.Accounts[1] + + program := fmt.Sprintf(`#pragma version %d + txn ApplicationID + bz end + + addr %s + balance + pop + + end: + int 1 + `, programVersion, foreignAccount.Addr.String()) + + appID := env.CreateApp(sender.Addr, simulationtesting.AppParams{ + ApprovalProgram: program, + ClearStateProgram: program, + }) + + pay := env.TxnInfo.NewTxn(txntest.Txn{ + Type: protocol.PaymentTx, + Sender: sender.Addr, + Receiver: sender.Addr, + Amount: 0, + }) + + appCall := env.TxnInfo.NewTxn(txntest.Txn{ + Type: protocol.ApplicationCallTx, + Sender: sender.Addr, + ApplicationID: appID, + }) + + txgroup := txntest.Group(&pay, &appCall) + + proto := env.TxnInfo.CurrentProtocolParams() + + var expectedTxnResources *simulation.ResourceTracker + var expectedGroupResources *simulation.ResourceTracker + + maxAppls := proto.MaxTxGroupSize - 1 + + if groupSharing { + expectedGroupResources = &simulation.ResourceTracker{ + MaxAccounts: (proto.MaxAppTxnAccounts + proto.MaxAppTxnForeignApps) * maxAppls, + MaxAssets: proto.MaxAppTxnForeignAssets * maxAppls, + MaxApps: proto.MaxAppTxnForeignApps * maxAppls, + MaxBoxes: proto.MaxAppBoxReferences * maxAppls, + MaxTotalRefs: proto.MaxAppTotalTxnReferences * maxAppls, + MaxCrossProductReferences: 80 * maxAppls, + Accounts: mapWithKeys([]basics.Address{foreignAccount.Addr}, struct{}{}), + } + expectedTxnResources = nil + } else { + expectedGroupResources = nil + expectedTxnResources = &simulation.ResourceTracker{ + MaxAccounts: proto.MaxAppTxnAccounts + proto.MaxAppTxnForeignApps, + MaxAssets: proto.MaxAppTxnForeignAssets, + MaxApps: proto.MaxAppTxnForeignApps, + MaxBoxes: proto.MaxAppBoxReferences, + MaxTotalRefs: proto.MaxAppTotalTxnReferences, + Accounts: mapWithKeys([]basics.Address{foreignAccount.Addr}, struct{}{}), + } + } + + expectedPopulatedArrays := map[int]simulation.PopulatedResourceArrays{ + 1: { + Accounts: []basics.Address{foreignAccount.Addr}, + Assets: nil, + Apps: nil, + Boxes: nil, + }, + } + + runSimulationTestCase(t, env, simulationTestCase{ + input: simulation.Request{ + TxnGroups: [][]transactions.SignedTxn{txgroup}, + AllowEmptySignatures: true, + AllowUnnamedResources: true, + PopulateResources: true, + }, + expected: simulation.Result{ + Version: simulation.ResultLatestVersion, + LastRound: env.TxnInfo.LatestRound(), + EvalOverrides: simulation.ResultEvalOverrides{ + AllowEmptySignatures: true, + AllowUnnamedResources: true, + }, + TxnGroups: []simulation.TxnGroupResult{{ + Txns: []simulation.TxnResult{ + {}, + { + AppBudgetConsumed: ignoreAppBudgetConsumed, + UnnamedResourcesAccessed: expectedTxnResources, + }}, + PopulatedResourceArrays: expectedPopulatedArrays, + AppBudgetConsumed: ignoreAppBudgetConsumed, + AppBudgetAdded: 700, + UnnamedResourcesAccessed: expectedGroupResources, + }}, + }, + }) +} + +func mixedResourcePopulationTest(t *testing.T) { + env := simulationtesting.PrepareSimulatorTest(t) + + sender := env.Accounts[0].Addr + otherAddress := env.Accounts[1].Addr + assetID := env.CreateAsset(sender, basics.AssetParams{Total: 100}) + + // Create app and asset for test and opt in + otherProg := "#pragma version 9\nint 1; return" + otherAppID := env.CreateApp(otherAddress, simulationtesting.AppParams{ + ApprovalProgram: otherProg, + ClearStateProgram: otherProg, + }) + env.OptIntoApp(otherAddress, otherAppID) + + env.OptIntoAsset(otherAddress, assetID) + env.TransferAsset(sender, otherAddress, assetID, 1) + + prog := fmt.Sprintf(`#pragma version 9 + txn ApplicationID + bz end + + addr %s // otherAddress + store 0 + + int %d // assetID + store 1 + + int %d // otherAppID + store 2 + + // Account access + load 0 // otherAddress + balance + assert + + // Asset params access + load 1 // assetID + asset_params_get AssetTotal + assert + int 100 + == + assert + + // Asset holding access + load 0 // otherAddress + load 1 // assetID + asset_holding_get AssetBalance + assert + int 1 + == + assert + + // App params access + load 2 // otherAppID + app_params_get AppCreator + assert + load 0 // otherAddress + == + assert + + // App local access + load 0 // otherAddress + load 2 // otherAppID + app_opted_in + assert + + // Box access + byte "A" + int 1025 + box_create + assert + + end: + int 1 + `, otherAddress.String(), assetID, otherAppID) + + testAppID := env.CreateApp(sender, simulationtesting.AppParams{ + ApprovalProgram: prog, + ClearStateProgram: prog, + }) + + env.TransferAlgos(sender, testAppID.Address(), 512900) + + appCall := env.TxnInfo.NewTxn(txntest.Txn{ + Type: protocol.ApplicationCallTx, + Sender: sender, + ApplicationID: testAppID, + }) + + stxn := appCall.SignedTxn() + proto := env.TxnInfo.CurrentProtocolParams() + maxAppls := proto.MaxTxGroupSize + + emptyBoxref := logic.BoxRef{App: basics.AppIndex(0), Name: ""} + box := logic.BoxRef{App: testAppID, Name: "A"} + + boxes := map[logic.BoxRef]uint64{} + boxes[box] = 0 + accounts := map[basics.Address]struct{}{} + accounts[otherAddress] = struct{}{} + assets := map[basics.AssetIndex]struct{}{} + assets[assetID] = struct{}{} + apps := map[basics.AppIndex]struct{}{} + apps[otherAppID] = struct{}{} + assetHoldings := map[ledgercore.AccountAsset]struct{}{} + assetHoldings[ledgercore.AccountAsset{Address: otherAddress, Asset: assetID}] = struct{}{} + appLocals := map[ledgercore.AccountApp]struct{}{} + appLocals[ledgercore.AccountApp{Address: otherAddress, App: otherAppID}] = struct{}{} + + expectedGroupResources := &simulation.ResourceTracker{ + MaxAccounts: (proto.MaxAppTxnAccounts + proto.MaxAppTxnForeignApps) * maxAppls, + MaxAssets: proto.MaxAppTxnForeignAssets * maxAppls, + MaxApps: proto.MaxAppTxnForeignApps * maxAppls, + MaxBoxes: proto.MaxAppBoxReferences * maxAppls, + MaxTotalRefs: proto.MaxAppTotalTxnReferences * maxAppls, + MaxCrossProductReferences: 80 * maxAppls, + Accounts: accounts, + Boxes: boxes, + Assets: assets, + Apps: apps, + AssetHoldings: assetHoldings, + AppLocals: appLocals, + NumEmptyBoxRefs: 1, + } + + expectedPopulatedArrays := map[int]simulation.PopulatedResourceArrays{ + 0: { + Accounts: []basics.Address{otherAddress}, + Assets: []basics.AssetIndex{assetID}, + Apps: []basics.AppIndex{otherAppID}, + Boxes: []logic.BoxRef{box, emptyBoxref}, + }, + } + + runSimulationTestCase(t, env, simulationTestCase{ + input: simulation.Request{ + TxnGroups: [][]transactions.SignedTxn{{stxn}}, + AllowEmptySignatures: true, + AllowUnnamedResources: true, + PopulateResources: true, + }, + expected: simulation.Result{ + Version: simulation.ResultLatestVersion, + LastRound: env.TxnInfo.LatestRound(), + EvalOverrides: simulation.ResultEvalOverrides{ + AllowEmptySignatures: true, + AllowUnnamedResources: true, + }, + TxnGroups: []simulation.TxnGroupResult{{ + Txns: []simulation.TxnResult{ + { + AppBudgetConsumed: ignoreAppBudgetConsumed, + UnnamedResourcesAccessed: nil, + }}, + PopulatedResourceArrays: expectedPopulatedArrays, + AppBudgetConsumed: ignoreAppBudgetConsumed, + AppBudgetAdded: 700, + UnnamedResourcesAccessed: expectedGroupResources, + }}, + }, + }) +} + +func TestPopulateResources(t *testing.T) { + partitiontest.PartitionTest(t) + t.Parallel() + + t.Run("group sharing", func(t *testing.T) { + t.Parallel() + populateResourceTest(t, true) + }) + + t.Run("no group sharing", func(t *testing.T) { + t.Parallel() + populateResourceTest(t, false) + }) + + t.Run("mixed resources", func(t *testing.T) { + t.Parallel() + mixedResourcePopulationTest(t) + }) +} + +func TestPopulateResourcesOrder(t *testing.T) { + env := simulationtesting.PrepareSimulatorTest(t) + sender := env.Accounts[0] + + addrs := make([]basics.Address, 4) + for i := 0; i < len(addrs); i++ { + addrs[i] = basics.Address{byte(i + 1)} + } + + apps := make([]basics.AppIndex, 4) + for i := 0; i < len(addrs); i++ { + apps[i] = basics.AppIndex(i + 10_000) + } + + assets := make([]basics.AssetIndex, 4) + for i := 0; i < len(addrs); i++ { + assets[i] = basics.AssetIndex(i + 10_000) + } + + program := fmt.Sprintf(`#pragma version 11 + txn ApplicationID + bz end + + addr %s; balance + addr %s; balance + addr %s; balance + addr %s; balance + + int %d; app_params_get AppCreator + int %d; app_params_get AppCreator + int %d; app_params_get AppCreator + int %d; app_params_get AppCreator + + int %d; asset_params_get AssetTotal + int %d; asset_params_get AssetTotal + int %d; asset_params_get AssetTotal + int %d; asset_params_get AssetTotal + + end: + int 1 + return + `, addrs[0], addrs[1], addrs[2], addrs[3], apps[0], apps[1], apps[2], apps[3], assets[0], assets[1], assets[2], assets[3]) + + appID := env.CreateApp(sender.Addr, simulationtesting.AppParams{ + ApprovalProgram: program, + ClearStateProgram: program, + }) + + appCall := env.TxnInfo.NewTxn(txntest.Txn{ + Type: protocol.ApplicationCallTx, + Sender: sender.Addr, + ApplicationID: appID, + }) + + txgroup := txntest.Group(&appCall) + + proto := env.TxnInfo.CurrentProtocolParams() + + var expectedTxnResources *simulation.ResourceTracker + var expectedGroupResources *simulation.ResourceTracker + + maxAppls := proto.MaxTxGroupSize + + expectedGroupResources = &simulation.ResourceTracker{ + MaxAccounts: (proto.MaxAppTxnAccounts + proto.MaxAppTxnForeignApps) * maxAppls, + MaxAssets: proto.MaxAppTxnForeignAssets * maxAppls, + MaxApps: proto.MaxAppTxnForeignApps * maxAppls, + MaxBoxes: proto.MaxAppBoxReferences * maxAppls, + MaxTotalRefs: proto.MaxAppTotalTxnReferences * maxAppls, + MaxCrossProductReferences: 80 * maxAppls, + Accounts: mapWithKeys(addrs, struct{}{}), + Assets: mapWithKeys(assets, struct{}{}), + Apps: mapWithKeys(apps, struct{}{}), + } + expectedTxnResources = nil + + expectedPopulatedArrays := map[int]simulation.PopulatedResourceArrays{ + 0: { + Accounts: addrs, + Assets: nil, + Apps: apps, + Boxes: nil, + }, + 1: { + Accounts: nil, + Assets: assets, + Apps: nil, + Boxes: nil, + }, + } + + runSimulationTestCase(t, env, simulationTestCase{ + input: simulation.Request{ + TxnGroups: [][]transactions.SignedTxn{txgroup}, + AllowEmptySignatures: true, + AllowUnnamedResources: true, + PopulateResources: true, + }, + expected: simulation.Result{ + Version: simulation.ResultLatestVersion, + LastRound: env.TxnInfo.LatestRound(), + EvalOverrides: simulation.ResultEvalOverrides{ + AllowEmptySignatures: true, + AllowUnnamedResources: true, + }, + TxnGroups: []simulation.TxnGroupResult{{ + Txns: []simulation.TxnResult{ + { + AppBudgetConsumed: ignoreAppBudgetConsumed, + UnnamedResourcesAccessed: expectedTxnResources, + }}, + PopulatedResourceArrays: expectedPopulatedArrays, + AppBudgetConsumed: ignoreAppBudgetConsumed, + AppBudgetAdded: 700, + UnnamedResourcesAccessed: expectedGroupResources, + }}, + }, + }) +} diff --git a/ledger/simulation/simulator.go b/ledger/simulation/simulator.go index 758275528f..586a0b7ceb 100644 --- a/ledger/simulation/simulator.go +++ b/ledger/simulation/simulator.go @@ -42,6 +42,7 @@ type Request struct { ExtraOpcodeBudget uint64 TraceConfig ExecTraceConfig FixSigners bool + PopulateResources bool } // simulatorLedger patches the ledger interface to use a constant latest round. @@ -332,6 +333,27 @@ func (s Simulator) Simulate(simulateRequest Request) (Result, error) { } if simulatorTracer.result.TxnGroups[0].UnnamedResourcesAccessed != nil { + // Only populate resources if there wasn't an error. Otherwise we might have incomplete information. + if err == nil && simulateRequest.PopulateResources { + consensusParams, err := s.ledger.ConsensusParams(s.ledger.start) + if err != nil { + return Result{}, err + } + populator := makeResourcePopulator(simulateRequest.TxnGroups[0], consensusParams) + + txnResources := make([]ResourceTracker, len(simulatorTracer.result.TxnGroups[0].Txns)) + for i, tx := range simulatorTracer.result.TxnGroups[0].Txns { + txnResources[i] = *tx.UnnamedResourcesAccessed + } + + err = populator.populateResources(*simulatorTracer.result.TxnGroups[0].UnnamedResourcesAccessed, txnResources) + if err != nil { + return Result{}, err + } + + simulatorTracer.result.TxnGroups[0].PopulatedResourceArrays = populator.getPopulatedArrays() + } + // Remove private fields for easier test comparison simulatorTracer.result.TxnGroups[0].UnnamedResourcesAccessed.removePrivateFields() if !simulatorTracer.result.TxnGroups[0].UnnamedResourcesAccessed.HasResources() { diff --git a/ledger/simulation/trace.go b/ledger/simulation/trace.go index 055fc2da0f..ff5ac5c4a9 100644 --- a/ledger/simulation/trace.go +++ b/ledger/simulation/trace.go @@ -72,6 +72,23 @@ type TxnGroupResult struct { // will be placed in the corresponding `UnnamedResourcesAccessed` field in the appropriate // TxnResult struct. UnnamedResourcesAccessed *ResourceTracker + + // PopulatedResourceArrays will be present if PopulateResources is true in the Request. + // In that case, it will be a map of resource arrays for each app call in the group. + // There may be more resource arrays for txn indexes that go beyond the group length, + // which means more app call transactions would be needed for the extra resources. + // + // For example, a [appl, appl, pay] group that needs three transactions worth of resources: + // { + // 0: PopulatedResourceArrays, + // 1: PopulatedResourceArrays, + // 2: nil // nil because txnGroup[2] is a pay + // 3: PopulatedResourceArrays // New index not in group indicates that a new appl is needed + // 4..15: nil // Everything else is nil + // } + // + // It should be noted that the indices will never exceed the transaction group size limit + PopulatedResourceArrays map[int]PopulatedResourceArrays } func makeTxnGroupResult(txgroup []transactions.SignedTxn) TxnGroupResult { diff --git a/test/e2e-go/restAPI/simulate/simulateRestAPI_test.go b/test/e2e-go/restAPI/simulate/simulateRestAPI_test.go index 90e59773e8..c4cc158adb 100644 --- a/test/e2e-go/restAPI/simulate/simulateRestAPI_test.go +++ b/test/e2e-go/restAPI/simulate/simulateRestAPI_test.go @@ -21,6 +21,7 @@ import ( "fmt" "net/http" "path/filepath" + "slices" "strings" "testing" "time" @@ -2694,6 +2695,225 @@ int 1 }, } a.Equal(expectedResult, resp) + + // PopulateResources=true should also work + resp, err = testClient.SimulateTransactions(v2.PreEncodedSimulateRequest{ + TxnGroups: []v2.PreEncodedSimulateRequestTransactionGroup{ + { + Txns: []transactions.SignedTxn{stxn}, + }, + }, + AllowUnnamedResources: true, + PopulateResources: true, + }) + a.NoError(err) + + otherAddressAddress := basics.Address{} + err = otherAddressAddress.UnmarshalText([]byte(otherAddress)) + a.NoError(err) + + expectedResult = v2.PreEncodedSimulateResponse{ + Version: 2, + LastRound: resp.LastRound, + EvalOverrides: &model.SimulationEvalOverrides{ + AllowUnnamedResources: &allowUnnamedResources, + }, + TxnGroups: []v2.PreEncodedSimulateTxnGroupResult{ + { + Txns: []v2.PreEncodedSimulateTxnResult{ + { + Txn: v2.PreEncodedTxInfo{Txn: stxn}, + AppBudgetConsumed: &budgetUsed, + PopulatedResourceArrays: &model.ResourceArrays{ + Accounts: &[]string{otherAddressAddress.String()}, + Assets: &[]uint64{uint64(assetID)}, + Apps: &[]uint64{uint64(otherAppID)}, + Boxes: &[]model.BoxReference{{App: uint64(testAppID), Name: []byte("A")}, {App: uint64(0), Name: []byte{}}}, + }, + }, + }, + AppBudgetAdded: &budgetAdded, + AppBudgetConsumed: &budgetUsed, + UnnamedResourcesAccessed: &expectedUnnamedGroupResources, + }, + }, + } + a.Equal(expectedResult, resp) +} + +func TestSimulateWithExtraPopulatedResourceArrays(t *testing.T) { + partitiontest.PartitionTest(t) + t.Parallel() + + a := require.New(fixtures.SynchronizedTest(t)) + var localFixture fixtures.RestClientFixture + localFixture.Setup(t, filepath.Join("nettemplates", "TwoNodes50EachFuture.json")) + defer localFixture.Shutdown() + + testClient := localFixture.LibGoalClient + + _, err := testClient.WaitForRound(1) + a.NoError(err) + + wh, err := testClient.GetUnencryptedWalletHandle() + a.NoError(err) + addresses, err := testClient.ListAddresses(wh) + a.NoError(err) + _, senderAddress := helper.GetMaxBalAddr(t, testClient, addresses) + a.NotEmpty(senderAddress, "no addr with funds") + a.NoError(err) + + ops, err := logic.AssembleString("#pragma version 11\n int 1") + a.NoError(err) + alwaysApprove := ops.Program + + gl := basics.StateSchema{} + lc := basics.StateSchema{} + + // create app + txn, err := testClient.MakeUnsignedAppCreateTx(transactions.OptInOC, alwaysApprove, alwaysApprove, gl, lc, nil, nil, nil, nil, nil, 0) + a.NoError(err) + txn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, 0, txn) + a.NoError(err) + // sign and broadcast + txID, err := testClient.SignAndBroadcastTransaction(wh, nil, txn) + a.NoError(err) + confirmedTxn, err := helper.WaitForTransaction(t, testClient, txID, 30*time.Second) + a.NoError(err) + // get app ID + a.NotNil(confirmedTxn.ApplicationIndex) + + addrs := make([]string, 5) + for i := 0; i < 5; i++ { + addrs[i] = basics.Address{byte(i)}.GetUserAddress() + } + + apps := make([]uint64, 4) + for i := 0; i < 4; i++ { + apps[i] = uint64((i + 1) * 10_000) + } + + asset := uint64(10_001) + + prog := fmt.Sprintf(`#pragma version 11 +txn ApplicationID +bz end + +// 1 box ref here and 1 empty ref later +byte "box_key"; int 1024; int 2; *; box_create + +// 4 accounts to max this txns limit +addr %s; acct_params_get AcctBalance +addr %s; acct_params_get AcctBalance +addr %s; acct_params_get AcctBalance +addr %s; acct_params_get AcctBalance + +// 3 apps to hit this txns reference limit and force references in ExtraResourceArrays +int %d; app_params_get AppCreator +int %d; app_params_get AppCreator +int %d; app_params_get AppCreator + +// App in ExtraResourceArrays +int %d; app_params_get AppCreator + +// Account in ExtraResourceArrays +addr %s; acct_params_get AcctBalance + +// Asset in ExtraResourceArrays +int %d; asset_params_get AssetTotal + +end: + int 1; return +`, addrs[0], addrs[1], addrs[2], addrs[3], apps[0], apps[1], apps[2], apps[3], addrs[4], asset) + + ops, err = logic.AssembleString(prog) + a.NoError(err) + approval := ops.Program + + // create app + txn, err = testClient.MakeUnsignedAppCreateTx(transactions.NoOpOC, approval, alwaysApprove, gl, lc, nil, nil, nil, nil, nil, 0) + a.NoError(err) + txn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, 0, txn) + a.NoError(err) + // sign and broadcast + txID, err = testClient.SignAndBroadcastTransaction(wh, nil, txn) + a.NoError(err) + confirmedTxn, err = helper.WaitForTransaction(t, testClient, txID, 30*time.Second) + a.NoError(err) + // get app ID + a.NotNil(confirmedTxn.ApplicationIndex) + testAppID := basics.AppIndex(*confirmedTxn.ApplicationIndex) + a.NotZero(testAppID) + + // fund app account + txn, err = testClient.SendPaymentFromWallet( + wh, nil, senderAddress, testAppID.Address().String(), + 0, 13_212_500, nil, "", 0, 0, + ) + a.NoError(err) + txID = txn.ID().String() + _, err = helper.WaitForTransaction(t, testClient, txID, 30*time.Second) + a.NoError(err) + + // construct app call + txn, err = testClient.MakeUnsignedAppNoOpTx( + uint64(testAppID), nil, nil, nil, nil, nil, 0, + ) + a.NoError(err) + txn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, 0, txn) + a.NoError(err) + stxn, err := testClient.SignTransactionWithWallet(wh, nil, txn) + a.NoError(err) + + // It should work with AllowUnnamedResources=true + resp, err := testClient.SimulateTransactions(v2.PreEncodedSimulateRequest{ + TxnGroups: []v2.PreEncodedSimulateRequestTransactionGroup{ + { + Txns: []transactions.SignedTxn{stxn}, + }, + }, + AllowUnnamedResources: true, + PopulateResources: true, + }) + a.NoError(err) + + grp := resp.TxnGroups[0] + a.Empty(grp.FailureMessage) + + boxes := []model.BoxReference{{App: uint64(1002), Name: []byte("box_key")}} + + a.ElementsMatch(*grp.UnnamedResourcesAccessed.Accounts, addrs) + a.Equal((*grp.UnnamedResourcesAccessed.Assets)[0], asset) + a.ElementsMatch(*grp.UnnamedResourcesAccessed.Apps, apps) + a.ElementsMatch(*grp.UnnamedResourcesAccessed.Boxes, boxes) + a.Equal(*grp.UnnamedResourcesAccessed.ExtraBoxRefs, uint64(1)) + + a.Len(*grp.ExtraResourceArrays, 1) + + // Resource population order is non-determinstic within an ref type + // and both assets and accounts have multiple values, so we need + // to combine the txn's populated array and the extra array + // to check for all values rather than checking each one seperately + resourceArrays := *grp.Txns[0].PopulatedResourceArrays + extraResources := (*grp.ExtraResourceArrays)[0] + populatedAccounts := slices.Concat(*extraResources.Accounts, *resourceArrays.Accounts) + populatedApps := slices.Concat(*extraResources.Apps, *resourceArrays.Apps) + + // All apps are populated and one of them is in the extra resource array + a.ElementsMatch(populatedApps, apps) + a.Len(*extraResources.Apps, 1) + + // All assets are populated and one of them is in the extra resource array + a.ElementsMatch(populatedAccounts, addrs) + a.Len(*extraResources.Accounts, 1) + + // The asset is in the extra resource array + a.Nil(resourceArrays.Assets) + a.Equal((*extraResources.Assets)[0], asset) + + // The txn has the box ref and the extra array has the empty ref + a.ElementsMatch(*resourceArrays.Boxes, boxes) + a.ElementsMatch(*extraResources.Boxes, []model.BoxReference{{App: uint64(0), Name: []byte("")}}) } func TestSimulateWithFixSigners(t *testing.T) { @@ -2778,3 +2998,152 @@ func TestSimulateWithFixSigners(t *testing.T) { } a.Equal(expectedResult, result) } + +func TestPopulatedResourceArraysOrder(t *testing.T) { + partitiontest.PartitionTest(t) + t.Parallel() + + a := require.New(fixtures.SynchronizedTest(t)) + var localFixture fixtures.RestClientFixture + localFixture.Setup(t, filepath.Join("nettemplates", "TwoNodes50EachFuture.json")) + defer localFixture.Shutdown() + + testClient := localFixture.LibGoalClient + + _, err := testClient.WaitForRound(1) + a.NoError(err) + + wh, err := testClient.GetUnencryptedWalletHandle() + a.NoError(err) + addresses, err := testClient.ListAddresses(wh) + a.NoError(err) + _, senderAddress := helper.GetMaxBalAddr(t, testClient, addresses) + a.NotEmpty(senderAddress, "no addr with funds") + a.NoError(err) + + ops, err := logic.AssembleString("#pragma version 11\n int 1") + a.NoError(err) + alwaysApprove := ops.Program + + gl := basics.StateSchema{} + lc := basics.StateSchema{} + + // create app + txn, err := testClient.MakeUnsignedAppCreateTx(transactions.OptInOC, alwaysApprove, alwaysApprove, gl, lc, nil, nil, nil, nil, nil, 0) + a.NoError(err) + txn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, 0, txn) + a.NoError(err) + // sign and broadcast + txID, err := testClient.SignAndBroadcastTransaction(wh, nil, txn) + a.NoError(err) + confirmedTxn, err := helper.WaitForTransaction(t, testClient, txID, 30*time.Second) + a.NoError(err) + // get app ID + a.NotNil(confirmedTxn.ApplicationIndex) + + addrs := make([]string, 4) + for i := 0; i < len(addrs); i++ { + addrs[i] = basics.Address{byte(i + 1)}.GetUserAddress() + } + + apps := make([]uint64, 4) + for i := 0; i < len(addrs); i++ { + apps[i] = uint64(i + 10_000) + } + + assets := make([]uint64, 4) + for i := 0; i < len(addrs); i++ { + assets[i] = uint64(i + 10_000) + } + + prog := fmt.Sprintf(`#pragma version 11 + txn ApplicationID + bz end + + addr %s; balance + addr %s; balance + addr %s; balance + addr %s; balance + + int %d; app_params_get AppCreator + int %d; app_params_get AppCreator + int %d; app_params_get AppCreator + int %d; app_params_get AppCreator + + int %d; asset_params_get AssetTotal + int %d; asset_params_get AssetTotal + int %d; asset_params_get AssetTotal + int %d; asset_params_get AssetTotal + + end: + int 1 + return + `, addrs[0], addrs[1], addrs[2], addrs[3], apps[0], apps[1], apps[2], apps[3], assets[0], assets[1], assets[2], assets[3]) + + ops, err = logic.AssembleString(prog) + a.NoError(err) + approval := ops.Program + + // create app + txn, err = testClient.MakeUnsignedAppCreateTx(transactions.NoOpOC, approval, alwaysApprove, gl, lc, nil, nil, nil, nil, nil, 0) + a.NoError(err) + txn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, 0, txn) + a.NoError(err) + // sign and broadcast + txID, err = testClient.SignAndBroadcastTransaction(wh, nil, txn) + a.NoError(err) + confirmedTxn, err = helper.WaitForTransaction(t, testClient, txID, 30*time.Second) + a.NoError(err) + // get app ID + a.NotNil(confirmedTxn.ApplicationIndex) + testAppID := basics.AppIndex(*confirmedTxn.ApplicationIndex) + a.NotZero(testAppID) + + // fund app account + txn, err = testClient.SendPaymentFromWallet( + wh, nil, senderAddress, testAppID.Address().String(), + 0, 13_212_500, nil, "", 0, 0, + ) + a.NoError(err) + txID = txn.ID().String() + _, err = helper.WaitForTransaction(t, testClient, txID, 30*time.Second) + a.NoError(err) + + // construct app call + txn, err = testClient.MakeUnsignedAppNoOpTx( + uint64(testAppID), nil, nil, nil, nil, nil, 0, + ) + a.NoError(err) + txn, err = testClient.FillUnsignedTxTemplate(senderAddress, 0, 0, 0, txn) + a.NoError(err) + stxn, err := testClient.SignTransactionWithWallet(wh, nil, txn) + a.NoError(err) + + // It should work with AllowUnnamedResources=true + resp, err := testClient.SimulateTransactions(v2.PreEncodedSimulateRequest{ + TxnGroups: []v2.PreEncodedSimulateRequestTransactionGroup{ + { + Txns: []transactions.SignedTxn{stxn}, + }, + }, + AllowUnnamedResources: true, + PopulateResources: true, + }) + a.NoError(err) + + grp := resp.TxnGroups[0] + a.Empty(grp.FailureMessage) + + a.ElementsMatch(*grp.UnnamedResourcesAccessed.Accounts, addrs) + a.ElementsMatch(*grp.UnnamedResourcesAccessed.Assets, assets) + a.ElementsMatch(*grp.UnnamedResourcesAccessed.Apps, apps) + + a.Len(*grp.ExtraResourceArrays, 1) + + resourceArrays := *grp.Txns[0].PopulatedResourceArrays + extraResources := (*grp.ExtraResourceArrays)[0] + + a.Equal(apps, *resourceArrays.Apps) + a.Equal(addrs, *resourceArrays.Accounts) + a.Equal(assets, *extraResources.Assets) +}