diff --git a/config/localTemplate.go b/config/localTemplate.go
index 6be2f0e1a4..0c41fcb06c 100644
--- a/config/localTemplate.go
+++ b/config/localTemplate.go
@@ -467,6 +467,10 @@ type Local struct {
// 0x01 (txFilterRawMsg) - check for raw tx message duplicates
// 0x02 (txFilterCanonical) - check for canonical tx group duplicates
TxIncomingFilteringFlags uint32 `version[26]:"1"`
+
+ // EnableExperimentalAPI enables experimental API endpoint. Note that these endpoints have no
+ // guarantees in terms of functionality or future support.
+ EnableExperimentalAPI bool `version[26]:"false"`
}
// DNSBootstrapArray returns an array of one or more DNS Bootstrap identifiers
diff --git a/config/local_defaults.go b/config/local_defaults.go
index 412c4a3dd2..f4531181d3 100644
--- a/config/local_defaults.go
+++ b/config/local_defaults.go
@@ -59,6 +59,7 @@ var defaultLocal = Local{
EnableBlockServiceFallbackToArchiver: true,
EnableCatchupFromArchiveServers: false,
EnableDeveloperAPI: false,
+ EnableExperimentalAPI: false,
EnableGossipBlockService: true,
EnableIncomingMessageFilter: false,
EnableLedgerService: false,
diff --git a/crypto/merklesignature/committablePublicKeys.go b/crypto/merklesignature/committablePublicKeys.go
index 7401c67efc..8c10cb2624 100644
--- a/crypto/merklesignature/committablePublicKeys.go
+++ b/crypto/merklesignature/committablePublicKeys.go
@@ -34,7 +34,7 @@ type (
keyLifetime uint64
}
- // CommittablePublicKey is used to create a binary representation of public keys in the merkle
+ // CommittablePublicKey is used to create a binary representation of public keys in the merkle
// signature scheme.
CommittablePublicKey struct {
VerifyingKey crypto.FalconVerifier
diff --git a/daemon/algod/api/Makefile b/daemon/algod/api/Makefile
index 811b18dc6f..c4104d9e80 100644
--- a/daemon/algod/api/Makefile
+++ b/daemon/algod/api/Makefile
@@ -2,7 +2,7 @@ GOPATH := $(shell go env GOPATH)
GOPATH1 := $(firstword $(subst :, ,$(GOPATH)))
# `make all` or just `make` should be appropriate for dev work
-all: server/v2/generated/model/types.go server/v2/generated/nonparticipating/public/routes.go server/v2/generated/nonparticipating/private/routes.go server/v2/generated/participating/public/routes.go server/v2/generated/participating/private/routes.go server/v2/generated/data/routes.go
+all: server/v2/generated/model/types.go server/v2/generated/nonparticipating/public/routes.go server/v2/generated/nonparticipating/private/routes.go server/v2/generated/participating/public/routes.go server/v2/generated/participating/private/routes.go server/v2/generated/data/routes.go server/v2/generated/experimental/routes.go
# `make generate` should be able to replace old `generate.sh` script and be appropriate for build system use
generate: oapi-codegen all
@@ -23,6 +23,9 @@ server/v2/generated/participating/private/routes.go: algod.oas3.yml
server/v2/generated/data/routes.go: algod.oas3.yml
$(GOPATH1)/bin/oapi-codegen -config ./server/v2/generated/data/data_routes.yml algod.oas3.yml
+server/v2/generated/experimental/routes.go: algod.oas3.yml
+ $(GOPATH1)/bin/oapi-codegen -config ./server/v2/generated/experimental/experimental_routes.yml algod.oas3.yml
+
server/v2/generated/model/types.go: algod.oas3.yml
$(GOPATH1)/bin/oapi-codegen -config ./server/v2/generated/model/model_types.yml algod.oas3.yml
diff --git a/daemon/algod/api/README.md b/daemon/algod/api/README.md
index b23f77128d..482ba23004 100644
--- a/daemon/algod/api/README.md
+++ b/daemon/algod/api/README.md
@@ -20,10 +20,10 @@ Each API in `algod.oas2.json`, except for some pre-existing `common` APIs, shoul
1. Either `public` or `private`. This controls the type of authentication used by the API--the `public` APIs use the
`algod.token` token, while the `private` APIs use the admin token, found in `algod.admin.token` within the algod data
directory.
-2. The type, or group, of API. This is currently `participating`, `nonparticipating`, or `data`, but may expand in the
-future to encompass different sets of APIs such as `experimental` APIs. Additional APIs should be added to one of the
-existing sets of tags based on its use case--unless you intend to create a new group in which case you will need to
-additionally ensure your new APIs are registered.
+2. The type, or group, of API. This is currently `participating`, `nonparticipating`, `data`, or `experimental`, but
+may expand in the future to encompass different sets of APIs. Additional APIs should be added to one of the existing
+sets of tags based on its use case--unless you intend to create a new group in which case you will need to additionally
+ensure your new APIs are registered.
For backwards compatibility, the default set of APIs registered will always be `participating` and `nonparticipating`
APIs.
@@ -38,6 +38,8 @@ participation keys, the agreement service, etc.
* A special set of APIs which require manipulating the node state in order to provide additional data about the node state
at some predefined granularity. For example, SetSyncRound and GetLedgerStateDelta used together control and expose StateDelta objects
containing per-round ledger differences that get compacted when actually written to the ledger DB.
+* `experimental`
+ * APIs which are still in development and not ready to be generally released.
## What codegen tool is used?
diff --git a/daemon/algod/api/algod.oas2.json b/daemon/algod/api/algod.oas2.json
index 755e23de2f..1999bcd7b7 100644
--- a/daemon/algod/api/algod.oas2.json
+++ b/daemon/algod/api/algod.oas2.json
@@ -1157,7 +1157,7 @@
"schemes": [
"http"
],
- "summary": "Broadcasts a raw transaction to the network.",
+ "summary": "Broadcasts a raw transaction or transaction group to the network.",
"operationId": "RawTransaction",
"parameters": [
{
@@ -1205,6 +1205,69 @@
}
}
},
+ "/v2/transactions/simulate": {
+ "post": {
+ "tags": [
+ "public",
+ "experimental"
+ ],
+ "consumes": [
+ "application/x-binary"
+ ],
+ "produces": [
+ "application/msgpack"
+ ],
+ "schemes": [
+ "http"
+ ],
+ "summary": "Simulates a raw transaction or transaction group as it would be evaluated on the network. WARNING: This endpoint is experimental and under active development. There are no guarantees in terms of functionality or future support.",
+ "operationId": "SimulateTransaction",
+ "parameters": [
+ {
+ "description": "The byte encoded transaction to simulate",
+ "name": "rawtxn",
+ "in": "body",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "format": "binary"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "$ref": "#/responses/SimulationResponse"
+ },
+ "400": {
+ "description": "Bad Request - Malformed Algorand transaction",
+ "schema": {
+ "$ref": "#/definitions/ErrorResponse"
+ }
+ },
+ "401": {
+ "description": "Invalid API Token",
+ "schema": {
+ "$ref": "#/definitions/ErrorResponse"
+ }
+ },
+ "500": {
+ "description": "Internal Error",
+ "schema": {
+ "$ref": "#/definitions/ErrorResponse"
+ }
+ },
+ "503": {
+ "description": "Service Temporarily Unavailable",
+ "schema": {
+ "$ref": "#/definitions/ErrorResponse"
+ }
+ },
+ "default": {
+ "description": "Unknown Error"
+ }
+ }
+ }
+ },
"/v2/transactions/params": {
"get": {
"tags": [
@@ -4128,6 +4191,29 @@
}
}
},
+ "SimulationResponse": {
+ "description": "Result of a transaction group simulation.",
+ "tags": [
+ "experimental"
+ ],
+ "schema": {
+ "type": "object",
+ "required": [
+ "failure-message",
+ "missing-signatures"
+ ],
+ "properties": {
+ "failure-message": {
+ "description": "\\[fm\\] Failure message, if the transaction would have failed during a live broadcast.",
+ "type": "string"
+ },
+ "missing-signatures": {
+ "description": "\\[ms\\] Whether any transactions would have failed during a live broadcast because they were missing signatures.",
+ "type": "boolean"
+ }
+ }
+ }
+ },
"SupplyResponse": {
"description": "Supply represents the current supply of MicroAlgos in the system.",
"schema": {
diff --git a/daemon/algod/api/algod.oas3.yml b/daemon/algod/api/algod.oas3.yml
index 3defdc557d..494531d71f 100644
--- a/daemon/algod/api/algod.oas3.yml
+++ b/daemon/algod/api/algod.oas3.yml
@@ -721,6 +721,30 @@
},
"description": "Transaction ID of the submission."
},
+ "SimulationResponse": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "properties": {
+ "failure-message": {
+ "description": "\\[fm\\] Failure message, if the transaction would have failed during a live broadcast.",
+ "type": "string"
+ },
+ "missing-signatures": {
+ "description": "\\[ms\\] Whether any transactions would have failed during a live broadcast because they were missing signatures.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "failure-message",
+ "missing-signatures"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Result of a transaction group simulation."
+ },
"StateProofResponse": {
"content": {
"application/json": {
@@ -5346,7 +5370,7 @@
"description": "Unknown Error"
}
},
- "summary": "Broadcasts a raw transaction to the network.",
+ "summary": "Broadcasts a raw transaction or transaction group to the network.",
"tags": [
"public",
"participating"
@@ -5687,6 +5711,99 @@
]
}
},
+ "/v2/transactions/simulate": {
+ "post": {
+ "operationId": "SimulateTransaction",
+ "requestBody": {
+ "content": {
+ "application/x-binary": {
+ "schema": {
+ "format": "binary",
+ "type": "string"
+ }
+ }
+ },
+ "description": "The byte encoded transaction to simulate",
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/msgpack": {
+ "schema": {
+ "properties": {
+ "failure-message": {
+ "description": "\\[fm\\] Failure message, if the transaction would have failed during a live broadcast.",
+ "type": "string"
+ },
+ "missing-signatures": {
+ "description": "\\[ms\\] Whether any transactions would have failed during a live broadcast because they were missing signatures.",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "failure-message",
+ "missing-signatures"
+ ],
+ "type": "object"
+ }
+ }
+ },
+ "description": "Result of a transaction group simulation."
+ },
+ "400": {
+ "content": {
+ "application/msgpack": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ },
+ "description": "Bad Request - Malformed Algorand transaction"
+ },
+ "401": {
+ "content": {
+ "application/msgpack": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ },
+ "description": "Invalid API Token"
+ },
+ "500": {
+ "content": {
+ "application/msgpack": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ },
+ "description": "Internal Error"
+ },
+ "503": {
+ "content": {
+ "application/msgpack": {
+ "schema": {
+ "$ref": "#/components/schemas/ErrorResponse"
+ }
+ }
+ },
+ "description": "Service Temporarily Unavailable"
+ },
+ "default": {
+ "content": {},
+ "description": "Unknown Error"
+ }
+ },
+ "summary": "Simulates a raw transaction or transaction group as it would be evaluated on the network. WARNING: This endpoint is experimental and under active development. There are no guarantees in terms of functionality or future support.",
+ "tags": [
+ "public",
+ "experimental"
+ ],
+ "x-codegen-request-body-name": "rawtxn"
+ }
+ },
"/versions": {
"get": {
"description": "Retrieves the supported API versions, binary build versions, and genesis information.",
diff --git a/daemon/algod/api/server/router.go b/daemon/algod/api/server/router.go
index 9f6c4277bd..d0b8ea19c1 100644
--- a/daemon/algod/api/server/router.go
+++ b/daemon/algod/api/server/router.go
@@ -30,6 +30,7 @@ import (
"github.com/algorand/go-algorand/daemon/algod/api/server/lib/middlewares"
"github.com/algorand/go-algorand/daemon/algod/api/server/v1/routes"
v2 "github.com/algorand/go-algorand/daemon/algod/api/server/v2"
+ "github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated/experimental"
npprivate "github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated/nonparticipating/private"
nppublic "github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated/nonparticipating/public"
pprivate "github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated/participating/private"
@@ -112,6 +113,10 @@ func NewRouter(logger logging.Logger, node *node.AlgorandFullNode, shutdown <-ch
ppublic.RegisterHandlers(e, &v2Handler, apiAuthenticator)
pprivate.RegisterHandlers(e, &v2Handler, adminAuthenticator)
+ if node.Config().EnableExperimentalAPI {
+ experimental.RegisterHandlers(e, &v2Handler, apiAuthenticator)
+ }
+
return e
}
diff --git a/daemon/algod/api/server/v2/generated/data/data_routes.yml b/daemon/algod/api/server/v2/generated/data/data_routes.yml
index 6de9f2be58..06a6306492 100644
--- a/daemon/algod/api/server/v2/generated/data/data_routes.yml
+++ b/daemon/algod/api/server/v2/generated/data/data_routes.yml
@@ -11,6 +11,7 @@ output-options:
- private
- participating
- nonparticipating
+ - experimental
type-mappings:
integer: uint64
skip-prune: true
diff --git a/daemon/algod/api/server/v2/generated/data/routes.go b/daemon/algod/api/server/v2/generated/data/routes.go
index 3e44f8c82f..6ce49875a9 100644
--- a/daemon/algod/api/server/v2/generated/data/routes.go
+++ b/daemon/algod/api/server/v2/generated/data/routes.go
@@ -136,174 +136,176 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
- "jbnbH2//fwAAAP//SDOA3yjJAAA=",
+ "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",
+ "YWj3h0//PwAA//9gJncgTcsAAA==",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/experimental/experimental_routes.yml b/daemon/algod/api/server/v2/generated/experimental/experimental_routes.yml
new file mode 100644
index 0000000000..d62923b4bf
--- /dev/null
+++ b/daemon/algod/api/server/v2/generated/experimental/experimental_routes.yml
@@ -0,0 +1,21 @@
+package: experimental
+generate:
+ echo-server: true
+ embedded-spec: true
+output-options:
+ include-tags:
+ - experimental
+ - public
+ exclude-tags:
+ - common
+ - private
+ - participating
+ - nonparticipating
+ - data
+ type-mappings:
+ integer: uint64
+ skip-prune: true
+additional-imports:
+ - alias: "."
+ package: "github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated/model"
+output: ./server/v2/generated/experimental/routes.go
diff --git a/daemon/algod/api/server/v2/generated/experimental/routes.go b/daemon/algod/api/server/v2/generated/experimental/routes.go
new file mode 100644
index 0000000000..221e4f9bd5
--- /dev/null
+++ b/daemon/algod/api/server/v2/generated/experimental/routes.go
@@ -0,0 +1,319 @@
+// Package experimental provides primitives to interact with the openapi HTTP API.
+//
+// Code generated by github.com/algorand/oapi-codegen DO NOT EDIT.
+package experimental
+
+import (
+ "bytes"
+ "compress/gzip"
+ "encoding/base64"
+ "fmt"
+ "net/url"
+ "path"
+ "strings"
+
+ . "github.com/algorand/go-algorand/daemon/algod/api/server/v2/generated/model"
+ "github.com/getkin/kin-openapi/openapi3"
+ "github.com/labstack/echo/v4"
+)
+
+// ServerInterface represents all server handlers.
+type ServerInterface interface {
+ // Simulates a raw transaction or transaction group as it would be evaluated on the network. WARNING: This endpoint is experimental and under active development. There are no guarantees in terms of functionality or future support.
+ // (POST /v2/transactions/simulate)
+ SimulateTransaction(ctx echo.Context) error
+}
+
+// ServerInterfaceWrapper converts echo contexts to parameters.
+type ServerInterfaceWrapper struct {
+ Handler ServerInterface
+}
+
+// SimulateTransaction converts echo context to params.
+func (w *ServerInterfaceWrapper) SimulateTransaction(ctx echo.Context) error {
+ var err error
+
+ ctx.Set(Api_keyScopes, []string{""})
+
+ // Invoke the callback with all the unmarshalled arguments
+ err = w.Handler.SimulateTransaction(ctx)
+ return err
+}
+
+// This is a simple interface which specifies echo.Route addition functions which
+// are present on both echo.Echo and echo.Group, since we want to allow using
+// either of them for path registration
+type EchoRouter interface {
+ CONNECT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
+ DELETE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
+ GET(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
+ HEAD(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
+ OPTIONS(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
+ PATCH(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
+ POST(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
+ PUT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
+ TRACE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route
+}
+
+// RegisterHandlers adds each server route to the EchoRouter.
+func RegisterHandlers(router EchoRouter, si ServerInterface, m ...echo.MiddlewareFunc) {
+ RegisterHandlersWithBaseURL(router, si, "", m...)
+}
+
+// Registers handlers, and prepends BaseURL to the paths, so that the paths
+// can be served under a prefix.
+func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL string, m ...echo.MiddlewareFunc) {
+
+ wrapper := ServerInterfaceWrapper{
+ Handler: si,
+ }
+
+ router.POST(baseURL+"/v2/transactions/simulate", wrapper.SimulateTransaction, m...)
+
+}
+
+// Base64 encoded, gzipped, json marshaled Swagger object
+var swaggerSpec = []string{
+
+ "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",
+}
+
+// GetSwagger returns the content of the embedded swagger specification file
+// or error if failed to decode
+func decodeSpec() ([]byte, error) {
+ zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, ""))
+ if err != nil {
+ return nil, fmt.Errorf("error base64 decoding spec: %s", err)
+ }
+ zr, err := gzip.NewReader(bytes.NewReader(zipped))
+ if err != nil {
+ return nil, fmt.Errorf("error decompressing spec: %s", err)
+ }
+ var buf bytes.Buffer
+ _, err = buf.ReadFrom(zr)
+ if err != nil {
+ return nil, fmt.Errorf("error decompressing spec: %s", err)
+ }
+
+ return buf.Bytes(), nil
+}
+
+var rawSpec = decodeSpecCached()
+
+// a naive cached of a decoded swagger spec
+func decodeSpecCached() func() ([]byte, error) {
+ data, err := decodeSpec()
+ return func() ([]byte, error) {
+ return data, err
+ }
+}
+
+// Constructs a synthetic filesystem for resolving external references when loading openapi specifications.
+func PathToRawSpec(pathToFile string) map[string]func() ([]byte, error) {
+ var res = make(map[string]func() ([]byte, error))
+ if len(pathToFile) > 0 {
+ res[pathToFile] = rawSpec
+ }
+
+ return res
+}
+
+// GetSwagger returns the Swagger specification corresponding to the generated code
+// in this file. The external references of Swagger specification are resolved.
+// The logic of resolving external references is tightly connected to "import-mapping" feature.
+// Externally referenced files must be embedded in the corresponding golang packages.
+// Urls can be supported but this task was out of the scope.
+func GetSwagger() (swagger *openapi3.T, err error) {
+ var resolvePath = PathToRawSpec("")
+
+ loader := openapi3.NewLoader()
+ loader.IsExternalRefsAllowed = true
+ loader.ReadFromURIFunc = func(loader *openapi3.Loader, url *url.URL) ([]byte, error) {
+ var pathToFile = url.String()
+ pathToFile = path.Clean(pathToFile)
+ getSpec, ok := resolvePath[pathToFile]
+ if !ok {
+ err1 := fmt.Errorf("path not found: %s", pathToFile)
+ return nil, err1
+ }
+ return getSpec()
+ }
+ var specData []byte
+ specData, err = rawSpec()
+ if err != nil {
+ return
+ }
+ swagger, err = loader.LoadFromData(specData)
+ if err != nil {
+ return
+ }
+ return
+}
diff --git a/daemon/algod/api/server/v2/generated/model/types.go b/daemon/algod/api/server/v2/generated/model/types.go
index f184d1a5f2..322a36d60f 100644
--- a/daemon/algod/api/server/v2/generated/model/types.go
+++ b/daemon/algod/api/server/v2/generated/model/types.go
@@ -1074,6 +1074,15 @@ type PostTransactionsResponse struct {
TxId string `json:"txId"`
}
+// SimulationResponse defines model for SimulationResponse.
+type SimulationResponse struct {
+ // FailureMessage \[fm\] Failure message, if the transaction would have failed during a live broadcast.
+ FailureMessage string `json:"failure-message"`
+
+ // MissingSignatures \[ms\] Whether any transactions would have failed during a live broadcast because they were missing signatures.
+ MissingSignatures bool `json:"missing-signatures"`
+}
+
// StateProofResponse Represents a state proof and its corresponding message
type StateProofResponse = StateProof
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 64f2bc2841..c672e94a67 100644
--- a/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go
+++ b/daemon/algod/api/server/v2/generated/nonparticipating/private/routes.go
@@ -130,173 +130,175 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
- "waR6124+3fz/AAAA///m3Czx7MQAAA==",
+ "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",
+ "1VOqN/X20+3/DwAA//+vckvpEccAAA==",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/nonparticipating/public/public_routes.yml b/daemon/algod/api/server/v2/generated/nonparticipating/public/public_routes.yml
index 0cc18f190c..8566bf764e 100644
--- a/daemon/algod/api/server/v2/generated/nonparticipating/public/public_routes.yml
+++ b/daemon/algod/api/server/v2/generated/nonparticipating/public/public_routes.yml
@@ -11,6 +11,7 @@ output-options:
- common
- participating
- data
+ - experimental
type-mappings:
integer: uint64
skip-prune: true
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 a63ee04392..70198d8794 100644
--- a/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go
+++ b/daemon/algod/api/server/v2/generated/nonparticipating/public/routes.go
@@ -548,227 +548,229 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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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 6b1676e8e8..e5d62e9a06 100644
--- a/daemon/algod/api/server/v2/generated/participating/private/routes.go
+++ b/daemon/algod/api/server/v2/generated/participating/private/routes.go
@@ -158,175 +158,177 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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",
}
// GetSwagger returns the content of the embedded swagger specification file
diff --git a/daemon/algod/api/server/v2/generated/participating/public/public_routes.yml b/daemon/algod/api/server/v2/generated/participating/public/public_routes.yml
index 5dac08d5b6..a568d05443 100644
--- a/daemon/algod/api/server/v2/generated/participating/public/public_routes.yml
+++ b/daemon/algod/api/server/v2/generated/participating/public/public_routes.yml
@@ -11,6 +11,7 @@ output-options:
- common
- nonparticipating
- data
+ - experimental
type-mappings:
integer: uint64
skip-prune: true
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 613a5d1cd0..2a3115ee8d 100644
--- a/daemon/algod/api/server/v2/generated/participating/public/routes.go
+++ b/daemon/algod/api/server/v2/generated/participating/public/routes.go
@@ -24,7 +24,7 @@ type ServerInterface interface {
// Get a list of unconfirmed transactions currently in the transaction pool by address.
// (GET /v2/accounts/{address}/transactions/pending)
GetPendingTransactionsByAddress(ctx echo.Context, address string, params GetPendingTransactionsByAddressParams) error
- // Broadcasts a raw transaction to the network.
+ // Broadcasts a raw transaction or transaction group to the network.
// (POST /v2/transactions)
RawTransaction(ctx echo.Context) error
// Get a list of unconfirmed transactions currently in the transaction pool.
@@ -177,183 +177,186 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
- "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",
+ "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",
+ "3wAA",
}
// 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 60a0a8e5de..c01420791c 100644
--- a/daemon/algod/api/server/v2/handlers.go
+++ b/daemon/algod/api/server/v2/handlers.go
@@ -45,6 +45,7 @@ import (
"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/ledger/simulation"
"github.com/algorand/go-algorand/logging"
"github.com/algorand/go-algorand/node"
"github.com/algorand/go-algorand/protocol"
@@ -96,6 +97,7 @@ type NodeInterface interface {
GenesisID() string
GenesisHash() crypto.Digest
BroadcastSignedTxGroup(txgroup []transactions.SignedTxn) error
+ Simulate(txgroup []transactions.SignedTxn) (vb *ledgercore.ValidatedBlock, missingSignatures bool, err error)
GetPendingTransaction(txID transactions.Txid) (res node.TxnWithStatus, found bool)
GetPendingTxnsFromPool() ([]transactions.SignedTxn, error)
SuggestedFee() basics.MicroAlgos
@@ -836,21 +838,10 @@ func (v2 *Handlers) WaitForBlock(ctx echo.Context, round uint64) error {
return v2.GetStatus(ctx)
}
-// RawTransaction broadcasts a raw transaction to the network.
-// (POST /v2/transactions)
-func (v2 *Handlers) RawTransaction(ctx echo.Context) error {
- stat, err := v2.Node.Status()
- if err != nil {
- return internalError(ctx, err, errFailedRetrievingNodeStatus, v2.Log)
- }
- if stat.Catchpoint != "" {
- // node is currently catching up to the requested catchpoint.
- return serviceUnavailable(ctx, fmt.Errorf("RawTransaction failed as the node was catchpoint catchuping"), errOperationNotAvailableDuringCatchup, v2.Log)
- }
- proto := config.Consensus[stat.LastVersion]
-
+// decodeTxGroup attempts to decode a request body containing a transaction group.
+func decodeTxGroup(body io.Reader, maxTxGroupSize int) ([]transactions.SignedTxn, error) {
var txgroup []transactions.SignedTxn
- dec := protocol.NewDecoder(ctx.Request().Body)
+ dec := protocol.NewDecoder(body)
for {
var st transactions.SignedTxn
err := dec.Decode(&st)
@@ -858,18 +849,38 @@ func (v2 *Handlers) RawTransaction(ctx echo.Context) error {
break
}
if err != nil {
- return badRequest(ctx, err, err.Error(), v2.Log)
+ return nil, err
}
txgroup = append(txgroup, st)
- if len(txgroup) > proto.MaxTxGroupSize {
- err := fmt.Errorf("max group size is %d", proto.MaxTxGroupSize)
- return badRequest(ctx, err, err.Error(), v2.Log)
+ if len(txgroup) > maxTxGroupSize {
+ err := fmt.Errorf("max group size is %d", maxTxGroupSize)
+ return nil, err
}
}
if len(txgroup) == 0 {
- err := errors.New("empty txgroup")
+ return nil, errors.New("empty txgroup")
+ }
+
+ return txgroup, nil
+}
+
+// RawTransaction broadcasts a raw transaction to the network.
+// (POST /v2/transactions)
+func (v2 *Handlers) RawTransaction(ctx echo.Context) error {
+ stat, err := v2.Node.Status()
+ if err != nil {
+ return internalError(ctx, err, errFailedRetrievingNodeStatus, v2.Log)
+ }
+ if stat.Catchpoint != "" {
+ // node is currently catching up to the requested catchpoint.
+ return serviceUnavailable(ctx, fmt.Errorf("RawTransaction failed as the node was catchpoint catchuping"), errOperationNotAvailableDuringCatchup, v2.Log)
+ }
+ proto := config.Consensus[stat.LastVersion]
+
+ txgroup, err := decodeTxGroup(ctx.Request().Body, proto.MaxTxGroupSize)
+ if err != nil {
return badRequest(ctx, err, err.Error(), v2.Log)
}
@@ -883,6 +894,57 @@ func (v2 *Handlers) RawTransaction(ctx echo.Context) error {
return ctx.JSON(http.StatusOK, model.PostTransactionsResponse{TxId: txid.String()})
}
+// SimulateTransaction simulates broadcasting a raw transaction to the network, returning relevant simulation results.
+// (POST /v2/transactions/simulate)
+func (v2 *Handlers) SimulateTransaction(ctx echo.Context) error {
+ if !v2.Node.Config().EnableExperimentalAPI {
+ // Right now this is a redundant/useless check at runtime, since experimental APIs are not registered when EnableExperimentalAPI=false.
+ // However, this endpoint won't always be experimental, so I've left this here as a reminder to have some other flag guarding its usage.
+ return ctx.String(http.StatusNotFound, fmt.Sprintf("%s was not enabled in the configuration file by setting EnableExperimentalAPI to true", ctx.Request().URL.Path))
+ }
+
+ stat, err := v2.Node.Status()
+ if err != nil {
+ return internalError(ctx, err, errFailedRetrievingNodeStatus, v2.Log)
+ }
+ if stat.Catchpoint != "" {
+ // node is currently catching up to the requested catchpoint.
+ return serviceUnavailable(ctx, fmt.Errorf("SimulateTransaction failed as the node was catchpoint catchuping"), errOperationNotAvailableDuringCatchup, v2.Log)
+ }
+ proto := config.Consensus[stat.LastVersion]
+
+ txgroup, err := decodeTxGroup(ctx.Request().Body, proto.MaxTxGroupSize)
+ if err != nil {
+ return badRequest(ctx, err, err.Error(), v2.Log)
+ }
+
+ var res model.SimulationResponse
+
+ // Simulate transaction
+ _, missingSignatures, err := v2.Node.Simulate(txgroup)
+ if err != nil {
+ var invalidTxErr *simulation.InvalidTxGroupError
+ var evalErr *simulation.EvalFailureError
+ switch {
+ case errors.As(err, &invalidTxErr):
+ return badRequest(ctx, invalidTxErr, invalidTxErr.Error(), v2.Log)
+ case errors.As(err, &evalErr):
+ res.FailureMessage = evalErr.Error()
+ default:
+ return internalError(ctx, err, err.Error(), v2.Log)
+ }
+ }
+ res.MissingSignatures = missingSignatures
+
+ // Return msgpack response
+ msgpack, err := encode(protocol.CodecHandle, &res)
+ if err != nil {
+ return internalError(ctx, err, errFailedToEncodeResponse, v2.Log)
+ }
+
+ return ctx.Blob(http.StatusOK, "application/msgpack", msgpack)
+}
+
// TealDryrun takes transactions and additional simulated ledger state and returns debugging information.
// (POST /v2/teal/dryrun)
func (v2 *Handlers) TealDryrun(ctx echo.Context) error {
diff --git a/daemon/algod/api/server/v2/test/handlers_test.go b/daemon/algod/api/server/v2/test/handlers_test.go
index 437dca2a34..e5e4b6419b 100644
--- a/daemon/algod/api/server/v2/test/handlers_test.go
+++ b/daemon/algod/api/server/v2/test/handlers_test.go
@@ -588,15 +588,15 @@ func TestPendingTransactionsByAddress(t *testing.T) {
pendingTransactionsByAddressTest(t, -1, "json", 400)
}
-func postTransactionTest(t *testing.T, txnToUse, expectedCode int) {
+func prepareTransactionTest(t *testing.T, txnToUse, expectedCode int, enableTransactionSimulator bool) (handler v2.Handlers, c echo.Context, rec *httptest.ResponseRecorder, releasefunc func()) {
numAccounts := 5
numTransactions := 5
offlineAccounts := true
mockLedger, _, _, stxns, releasefunc := testingenv(t, numAccounts, numTransactions, offlineAccounts)
- defer releasefunc()
dummyShutdownChan := make(chan struct{})
mockNode := makeMockNode(mockLedger, t.Name(), nil)
- handler := v2.Handlers{
+ mockNode.config.EnableExperimentalAPI = enableTransactionSimulator
+ handler = v2.Handlers{
Node: mockNode,
Log: logging.Base(),
Shutdown: dummyShutdownChan,
@@ -609,8 +609,14 @@ func postTransactionTest(t *testing.T, txnToUse, expectedCode int) {
body = bytes.NewReader(bodyBytes)
}
req := httptest.NewRequest(http.MethodPost, "/", body)
- rec := httptest.NewRecorder()
- c := e.NewContext(req, rec)
+ rec = httptest.NewRecorder()
+ c = e.NewContext(req, rec)
+ return
+}
+
+func postTransactionTest(t *testing.T, txnToUse, expectedCode int) {
+ handler, c, rec, releasefunc := prepareTransactionTest(t, txnToUse, expectedCode, false)
+ defer releasefunc()
err := handler.RawTransaction(c)
require.NoError(t, err)
require.Equal(t, expectedCode, rec.Code)
@@ -624,6 +630,23 @@ func TestPostTransaction(t *testing.T) {
postTransactionTest(t, 0, 200)
}
+func simulateTransactionTest(t *testing.T, txnToUse, expectedCode int, enableTransactionSimulator bool) {
+ handler, c, rec, releasefunc := prepareTransactionTest(t, txnToUse, expectedCode, enableTransactionSimulator)
+ defer releasefunc()
+ err := handler.SimulateTransaction(c)
+ require.NoError(t, err)
+ require.Equal(t, expectedCode, rec.Code)
+}
+
+func TestSimulateTransaction(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ simulateTransactionTest(t, -1, 400, true)
+ simulateTransactionTest(t, 0, 404, false)
+ simulateTransactionTest(t, 0, 200, true)
+}
+
func startCatchupTest(t *testing.T, catchpoint string, nodeError error, expectedCode int) {
numAccounts := 1
numTransactions := 1
diff --git a/daemon/algod/api/server/v2/test/helpers.go b/daemon/algod/api/server/v2/test/helpers.go
index 87b30cd278..048eb6c31f 100644
--- a/daemon/algod/api/server/v2/test/helpers.go
+++ b/daemon/algod/api/server/v2/test/helpers.go
@@ -191,6 +191,10 @@ func (m *mockNode) BroadcastSignedTxGroup(txgroup []transactions.SignedTxn) erro
return m.err
}
+func (m *mockNode) Simulate(txgroup []transactions.SignedTxn) (*ledgercore.ValidatedBlock, bool, error) {
+ return nil, false, m.err
+}
+
func (m *mockNode) GetPendingTransaction(txID transactions.Txid) (res node.TxnWithStatus, found bool) {
res = node.TxnWithStatus{}
found = true
diff --git a/installer/config.json.example b/installer/config.json.example
index 9002388088..9bad071d05 100644
--- a/installer/config.json.example
+++ b/installer/config.json.example
@@ -38,6 +38,7 @@
"EnableBlockServiceFallbackToArchiver": true,
"EnableCatchupFromArchiveServers": false,
"EnableDeveloperAPI": false,
+ "EnableExperimentalAPI": false,
"EnableGossipBlockService": true,
"EnableIncomingMessageFilter": false,
"EnableLedgerService": false,
diff --git a/ledger/simulation/simulator.go b/ledger/simulation/simulator.go
new file mode 100644
index 0000000000..a6b12b6832
--- /dev/null
+++ b/ledger/simulation/simulator.go
@@ -0,0 +1,202 @@
+// Copyright (C) 2019-2022 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see .
+
+package simulation
+
+import (
+ "errors"
+
+ "github.com/algorand/go-algorand/crypto"
+ "github.com/algorand/go-algorand/data"
+ "github.com/algorand/go-algorand/data/basics"
+ "github.com/algorand/go-algorand/data/bookkeeping"
+ "github.com/algorand/go-algorand/data/transactions"
+ "github.com/algorand/go-algorand/data/transactions/verify"
+ "github.com/algorand/go-algorand/ledger/ledgercore"
+ "github.com/algorand/go-algorand/protocol"
+)
+
+// ==============================
+// > Simulator Ledger
+// ==============================
+
+// simulatorLedger patches the ledger interface to use a constant latest round.
+type simulatorLedger struct {
+ *data.Ledger
+ start basics.Round
+}
+
+// Latest is part of the LedgerForSimulator interface.
+// We override this to use the set latest to prevent racing with the network
+func (l simulatorLedger) Latest() basics.Round {
+ return l.start
+}
+
+// LookupLatest would implicitly use the latest round in the _underlying_
+// Ledger, it would give wrong results if that ledger has moved forward. But it
+// should never be called, as the REST API is the only code using this function,
+// and the REST API should never have access to a simulatorLedger.
+func (l simulatorLedger) LookupLatest(addr basics.Address) (basics.AccountData, basics.Round, basics.MicroAlgos, error) {
+ err := errors.New("unexpected call to LookupLatest")
+ return basics.AccountData{}, 0, basics.MicroAlgos{}, err
+}
+
+// ==============================
+// > Simulator Errors
+// ==============================
+
+// SimulatorError is the base error type for all simulator errors.
+type SimulatorError struct {
+ err error
+}
+
+func (s SimulatorError) Error() string {
+ return s.err.Error()
+}
+
+func (s SimulatorError) Unwrap() error {
+ return s.err
+}
+
+// InvalidTxGroupError occurs when an invalid transaction group was submitted to the simulator.
+type InvalidTxGroupError struct {
+ SimulatorError
+}
+
+// EvalFailureError represents an error that occurred during evaluation.
+type EvalFailureError struct {
+ SimulatorError
+}
+
+// ==============================
+// > Simulator
+// ==============================
+
+// Simulator is a transaction group simulator for the block evaluator.
+type Simulator struct {
+ ledger simulatorLedger
+}
+
+// MakeSimulator creates a new simulator from a ledger.
+func MakeSimulator(ledger *data.Ledger) *Simulator {
+ return &Simulator{
+ ledger: simulatorLedger{ledger, ledger.Latest()},
+ }
+}
+
+func txnHasNoSignature(txn transactions.SignedTxn) bool {
+ return txn.Sig.Blank() && txn.Msig.Blank() && txn.Lsig.Blank()
+}
+
+// A randomly generated private key. The actual value does not matter, as long as this is a valid
+// private key.
+var proxySigner = crypto.PrivateKey{
+ 128, 128, 92, 23, 212, 119, 175, 51, 157, 2, 165,
+ 215, 137, 37, 82, 42, 52, 227, 54, 41, 243, 67,
+ 141, 76, 208, 17, 199, 17, 140, 46, 113, 0, 159,
+ 50, 105, 52, 77, 104, 118, 200, 104, 220, 105, 21,
+ 147, 162, 191, 236, 115, 201, 197, 128, 8, 91, 224,
+ 78, 104, 209, 2, 185, 110, 28, 42, 97,
+}
+
+// check verifies that the transaction is well-formed and has valid or missing signatures.
+// An invalid transaction group error is returned if the transaction is not well-formed or there are invalid signatures.
+// To make things easier, we support submitting unsigned transactions and will respond whether signatures are missing.
+func (s Simulator) check(hdr bookkeeping.BlockHeader, txgroup []transactions.SignedTxn) (bool, error) {
+ proxySignerSecrets, err := crypto.SecretKeyToSignatureSecrets(proxySigner)
+ if err != nil {
+ return false, err
+ }
+
+ // Find and prep any transactions that are missing signatures. We will modify a copy of these
+ // transactions to pass signature verification. The modifications will not affect the input
+ // txgroup slice.
+ //
+ // Note: currently we only support missing transaction signatures, but it should be possible to
+ // support unsigned delegated LogicSigs as well. A single-signature unsigned delegated LogicSig
+ // is indistinguishable from an escrow LogicSig, so we would need to decide on another way of
+ // denoting that a LogicSig's delegation signature is omitted, e.g. by setting all the bits of
+ // the signature.
+ missingSigs := make([]int, 0, len(txgroup))
+ txnsToVerify := make([]transactions.SignedTxn, len(txgroup))
+ for i, stxn := range txgroup {
+ if stxn.Txn.Type == protocol.StateProofTx {
+ return false, errors.New("cannot simulate StateProof transactions")
+ }
+ if txnHasNoSignature(stxn) {
+ missingSigs = append(missingSigs, i)
+
+ // Replace the signed txn with one signed by the proxySigner. At evaluation this would
+ // raise an error, since the proxySigner's public key likely does not have authority
+ // over the sender's account. However, this will pass validation, since the signature
+ // itself is valid.
+ txnsToVerify[i] = stxn.Txn.Sign(proxySignerSecrets)
+ } else {
+ txnsToVerify[i] = stxn
+ }
+ }
+
+ // Verify the signed transactions are well-formed and have valid signatures
+ _, err = verify.TxnGroup(txnsToVerify, hdr, nil, s.ledger)
+ if err != nil {
+ return false, InvalidTxGroupError{SimulatorError{err}}
+ }
+
+ return len(missingSigs) != 0, nil
+}
+
+func (s Simulator) evaluate(hdr bookkeeping.BlockHeader, stxns []transactions.SignedTxn) (*ledgercore.ValidatedBlock, error) {
+ // s.ledger has 'StartEvaluator' because *data.Ledger is embedded in the simulatorLedger
+ // and data.Ledger embeds *ledger.Ledger
+ eval, err := s.ledger.StartEvaluator(hdr, len(stxns), 0)
+ if err != nil {
+ return nil, err
+ }
+
+ group := transactions.WrapSignedTxnsWithAD(stxns)
+
+ err = eval.TransactionGroup(group)
+ if err != nil {
+ return nil, EvalFailureError{SimulatorError{err}}
+ }
+
+ // Finally, process any pending end-of-block state changes.
+ vb, err := eval.GenerateBlock()
+ if err != nil {
+ return nil, err
+ }
+
+ return vb, nil
+}
+
+// Simulate simulates a transaction group using the simulator. Will error if the transaction group is not well-formed.
+func (s Simulator) Simulate(txgroup []transactions.SignedTxn) (*ledgercore.ValidatedBlock, bool, error) {
+ prevBlockHdr, err := s.ledger.BlockHdr(s.ledger.start)
+ if err != nil {
+ return nil, false, err
+ }
+ nextBlock := bookkeeping.MakeBlock(prevBlockHdr)
+ hdr := nextBlock.BlockHeader
+
+ // check that the transaction is well-formed and mark whether signatures are missing
+ missingSignatures, err := s.check(hdr, txgroup)
+ if err != nil {
+ return nil, false, err
+ }
+
+ vb, err := s.evaluate(hdr, txgroup)
+ return vb, missingSignatures, err
+}
diff --git a/ledger/simulation/simulator_test.go b/ledger/simulation/simulator_test.go
new file mode 100644
index 0000000000..d33299fdbc
--- /dev/null
+++ b/ledger/simulation/simulator_test.go
@@ -0,0 +1,746 @@
+// Copyright (C) 2019-2022 Algorand, Inc.
+// This file is part of go-algorand
+//
+// go-algorand is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// go-algorand is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with go-algorand. If not, see .
+
+package simulation_test
+
+import (
+ "encoding/binary"
+ "fmt"
+ "reflect"
+ "testing"
+
+ "github.com/algorand/go-algorand/config"
+ "github.com/algorand/go-algorand/crypto"
+ "github.com/algorand/go-algorand/data"
+ "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"
+ "github.com/algorand/go-algorand/ledger/internal"
+ "github.com/algorand/go-algorand/ledger/simulation"
+ ledgertesting "github.com/algorand/go-algorand/ledger/testing"
+ "github.com/algorand/go-algorand/libgoal"
+ "github.com/algorand/go-algorand/logging"
+ "github.com/algorand/go-algorand/protocol"
+ "github.com/algorand/go-algorand/test/partitiontest"
+ "github.com/stretchr/testify/require"
+)
+
+// ==============================
+// > Simulation Test Helpers
+// ==============================
+
+type account struct {
+ addr basics.Address
+ sk *crypto.SignatureSecrets
+ acctData basics.AccountData
+}
+
+func prepareSimulatorTest(t *testing.T) (l *data.Ledger, accounts []account, makeTxnHeader func(sender basics.Address) transactions.Header) {
+ genesisInitState, keys := ledgertesting.GenerateInitState(t, protocol.ConsensusCurrentVersion, 100)
+
+ // Prepare ledger
+ const inMem = true
+ cfg := config.GetDefaultLocal()
+ cfg.Archival = true
+ log := logging.TestingLog(t)
+ log.SetLevel(logging.Warn)
+ realLedger, err := ledger.OpenLedger(log, t.Name(), inMem, genesisInitState, cfg)
+ require.NoError(t, err, "could not open ledger")
+
+ l = &data.Ledger{Ledger: realLedger}
+ require.NotNil(t, l)
+
+ // Reformat accounts
+ accounts = make([]account, len(keys)-2) // -2 for pool and sink accounts
+ i := 0
+ for addr, key := range keys {
+ if addr == ledgertesting.PoolAddr() || addr == ledgertesting.SinkAddr() {
+ continue
+ }
+
+ acctData := genesisInitState.Accounts[addr]
+ accounts[i] = account{addr, key, acctData}
+ i++
+ }
+
+ // txn header generator
+ hdr, err := l.BlockHdr(l.Latest())
+ require.NoError(t, err)
+ makeTxnHeader = func(sender basics.Address) transactions.Header {
+ return transactions.Header{
+ Fee: basics.MicroAlgos{Raw: 1000},
+ FirstValid: hdr.Round,
+ GenesisID: hdr.GenesisID,
+ GenesisHash: hdr.GenesisHash,
+ LastValid: hdr.Round + basics.Round(1000),
+ Note: []byte{240, 134, 38, 55, 197, 14, 142, 132},
+ Sender: sender,
+ }
+ }
+
+ return
+}
+
+func makeTestClient() libgoal.Client {
+ c, err := libgoal.MakeClientFromConfig(libgoal.ClientConfig{
+ AlgodDataDir: "NO_DIR",
+ }, libgoal.DynamicClient)
+ if err != nil {
+ panic(err)
+ }
+
+ return c
+}
+
+// Attach group ID to a transaction group. Mutates the group directly.
+func attachGroupID(txgroup []transactions.SignedTxn) error {
+ txnArray := make([]transactions.Transaction, len(txgroup))
+ for i, txn := range txgroup {
+ txnArray[i] = txn.Txn
+ }
+
+ client := makeTestClient()
+ groupID, err := client.GroupID(txnArray)
+ if err != nil {
+ return err
+ }
+
+ for i := range txgroup {
+ txgroup[i].Txn.Header.Group = groupID
+ }
+
+ return nil
+}
+
+func uint64ToBytes(num uint64) []byte {
+ ibytes := make([]byte, 8)
+ binary.BigEndian.PutUint64(ibytes, num)
+ return ibytes
+}
+
+// ==============================
+// > Sanity Tests
+// ==============================
+
+// We want to be careful that the Algod ledger does not move on to another round
+// so we confirm here that all ledger methods which implicitly access the current round
+// are overriden within the `simulatorLedger`.
+func TestNonOverridenDataLedgerMethodsUseRoundParameter(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ l, _, _ := prepareSimulatorTest(t)
+
+ // methods overriden by `simulatorLedger``
+ overridenMethods := []string{
+ "Latest",
+ "LookupLatest",
+ }
+
+ // methods that don't use a round number
+ excludedMethods := []string{
+ "GenesisHash",
+ "GenesisProto",
+ "LatestTotals",
+ "FlushCaches",
+ }
+
+ methodIsSkipped := func(methodName string) bool {
+ for _, overridenMethod := range overridenMethods {
+ if overridenMethod == methodName {
+ return true
+ }
+ }
+ for _, excludedMethod := range excludedMethods {
+ if excludedMethod == methodName {
+ return true
+ }
+ }
+ return false
+ }
+
+ methodExistsInEvalLedger := func(methodName string) bool {
+ evalLedgerType := reflect.TypeOf((*internal.LedgerForEvaluator)(nil)).Elem()
+ for i := 0; i < evalLedgerType.NumMethod(); i++ {
+ if evalLedgerType.Method(i).Name == methodName {
+ return true
+ }
+ }
+ return false
+ }
+
+ methodHasRoundParameter := func(methodType reflect.Type) bool {
+ for i := 0; i < methodType.NumIn(); i++ {
+ if methodType.In(i) == reflect.TypeOf(basics.Round(0)) {
+ return true
+ }
+ }
+ return false
+ }
+
+ ledgerType := reflect.TypeOf(l)
+ for i := 0; i < ledgerType.NumMethod(); i++ {
+ method := ledgerType.Method(i)
+ if methodExistsInEvalLedger(method.Name) && !methodIsSkipped(method.Name) {
+ require.True(t, methodHasRoundParameter(method.Type), "method %s has no round parameter", method.Name)
+ }
+ }
+}
+
+// ==============================
+// > Simulation Tests
+// ==============================
+
+func TestPayTxn(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ for _, signed := range []bool{true, false} {
+ signed := signed
+ t.Run(fmt.Sprintf("signed=%t", signed), func(t *testing.T) {
+ t.Parallel()
+ l, accounts, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+ sender := accounts[0]
+
+ txn := transactions.SignedTxn{
+ Txn: transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: makeTxnHeader(sender.addr),
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: sender.addr,
+ Amount: basics.MicroAlgos{Raw: 0},
+ },
+ },
+ }
+
+ if signed {
+ txn = txn.Txn.Sign(sender.sk)
+ }
+
+ txgroup := []transactions.SignedTxn{txn}
+
+ _, _, err := s.Simulate(txgroup)
+ require.NoError(t, err)
+ })
+ }
+}
+
+func TestOverspendPayTxn(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ for _, signed := range []bool{true, false} {
+ signed := signed
+ t.Run(fmt.Sprintf("signed=%t", signed), func(t *testing.T) {
+ t.Parallel()
+ l, accounts, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+ sender := accounts[0]
+ senderBalance := sender.acctData.MicroAlgos
+ amount := senderBalance.Raw + 100
+
+ txn := transactions.SignedTxn{
+ Txn: transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: makeTxnHeader(sender.addr),
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: sender.addr,
+ Amount: basics.MicroAlgos{Raw: amount}, // overspend
+ },
+ },
+ }
+
+ if signed {
+ txn = txn.Txn.Sign(sender.sk)
+ }
+
+ txgroup := []transactions.SignedTxn{txn}
+
+ _, _, err := s.Simulate(txgroup)
+ require.ErrorAs(t, err, &simulation.EvalFailureError{})
+ require.ErrorContains(t, err, fmt.Sprintf("tried to spend {%d}", amount))
+ })
+ }
+}
+
+func TestAuthAddrTxn(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ for _, signed := range []bool{true, false} {
+ signed := signed
+ t.Run(fmt.Sprintf("signed=%t", signed), func(t *testing.T) {
+ t.Parallel()
+ l, accounts, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+ sender := accounts[0]
+ authority := accounts[1]
+
+ txn := transactions.SignedTxn{
+ Txn: transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: makeTxnHeader(sender.addr),
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: sender.addr,
+ Amount: basics.MicroAlgos{Raw: 0},
+ },
+ },
+ AuthAddr: authority.addr,
+ }
+
+ if signed {
+ txn = txn.Txn.Sign(authority.sk)
+ }
+
+ txgroup := []transactions.SignedTxn{txn}
+
+ _, _, err := s.Simulate(txgroup)
+ require.ErrorContains(t, err, fmt.Sprintf("should have been authorized by %s but was actually authorized by %s", sender.addr, authority.addr))
+ })
+ }
+}
+
+func TestStateProofTxn(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ l, _, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+
+ txgroup := []transactions.SignedTxn{
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.StateProofTx,
+ Header: makeTxnHeader(transactions.StateProofSender),
+ // No need to fill out StateProofTxnFields, this should fail at signature verification
+ },
+ },
+ }
+
+ _, _, err := s.Simulate(txgroup)
+ require.ErrorContains(t, err, "cannot simulate StateProof transactions")
+}
+
+func TestSimpleGroupTxn(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ l, accounts, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+ sender1 := accounts[0].addr
+ sender1Balance := accounts[0].acctData.MicroAlgos
+ sender2 := accounts[1].addr
+ sender2Balance := accounts[1].acctData.MicroAlgos
+
+ // Send money back and forth
+ txgroup := []transactions.SignedTxn{
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: makeTxnHeader(sender1),
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: sender2,
+ Amount: basics.MicroAlgos{Raw: 1000000},
+ },
+ },
+ },
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: makeTxnHeader(sender2),
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: sender1,
+ Amount: basics.MicroAlgos{Raw: 0},
+ },
+ },
+ },
+ }
+
+ // Should fail if there is no group parameter
+ _, _, err := s.Simulate(txgroup)
+ require.ErrorAs(t, err, &simulation.EvalFailureError{})
+ require.ErrorContains(t, err, "had zero Group but was submitted in a group of 2")
+
+ // Add group parameter
+ err = attachGroupID(txgroup)
+ require.NoError(t, err)
+
+ // Check balances before transaction
+ sender1Data, _, err := l.LookupWithoutRewards(l.Latest(), sender1)
+ require.NoError(t, err)
+ require.Equal(t, sender1Balance, sender1Data.MicroAlgos)
+
+ sender2Data, _, err := l.LookupWithoutRewards(l.Latest(), sender2)
+ require.NoError(t, err)
+ require.Equal(t, sender2Balance, sender2Data.MicroAlgos)
+
+ // Should now pass
+ _, _, err = s.Simulate(txgroup)
+ require.NoError(t, err)
+
+ // Confirm balances have not changed
+ sender1Data, _, err = l.LookupWithoutRewards(l.Latest(), sender1)
+ require.NoError(t, err)
+ require.Equal(t, sender1Balance, sender1Data.MicroAlgos)
+
+ sender2Data, _, err = l.LookupWithoutRewards(l.Latest(), sender2)
+ require.NoError(t, err)
+ require.Equal(t, sender2Balance, sender2Data.MicroAlgos)
+}
+
+const trivialAVMProgram = `#pragma version 2
+int 1`
+const rejectAVMProgram = `#pragma version 2
+int 0`
+
+func TestSimpleAppCall(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ l, accounts, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+ sender := accounts[0].addr
+
+ // Compile AVM program
+ ops, err := logic.AssembleString(trivialAVMProgram)
+ require.NoError(t, err, ops.Errors)
+ prog := ops.Program
+
+ // Create program and call it
+ futureAppID := 1
+ txgroup := []transactions.SignedTxn{
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.ApplicationCallTx,
+ Header: makeTxnHeader(sender),
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: 0,
+ ApprovalProgram: prog,
+ ClearStateProgram: prog,
+ LocalStateSchema: basics.StateSchema{
+ NumUint: 0,
+ NumByteSlice: 0,
+ },
+ GlobalStateSchema: basics.StateSchema{
+ NumUint: 0,
+ NumByteSlice: 0,
+ },
+ },
+ },
+ },
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.ApplicationCallTx,
+ Header: makeTxnHeader(sender),
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: basics.AppIndex(futureAppID),
+ },
+ },
+ },
+ }
+
+ err = attachGroupID(txgroup)
+ require.NoError(t, err)
+
+ _, _, err = s.Simulate(txgroup)
+ require.NoError(t, err)
+}
+
+func TestRejectAppCall(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ l, accounts, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+ sender := accounts[0].addr
+
+ // Compile AVM program
+ ops, err := logic.AssembleString(rejectAVMProgram)
+ require.NoError(t, err, ops.Errors)
+ prog := ops.Program
+
+ // Create program and call it
+ txgroup := []transactions.SignedTxn{
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.ApplicationCallTx,
+ Header: makeTxnHeader(sender),
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: 0,
+ ApprovalProgram: prog,
+ ClearStateProgram: prog,
+ LocalStateSchema: basics.StateSchema{
+ NumUint: 0,
+ NumByteSlice: 0,
+ },
+ GlobalStateSchema: basics.StateSchema{
+ NumUint: 0,
+ NumByteSlice: 0,
+ },
+ },
+ },
+ },
+ }
+
+ err = attachGroupID(txgroup)
+ require.NoError(t, err)
+
+ _, _, err = s.Simulate(txgroup)
+ require.ErrorAs(t, err, &simulation.EvalFailureError{})
+ require.ErrorContains(t, err, "transaction rejected by ApprovalProgram")
+}
+
+func TestSignatureCheck(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ l, accounts, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+ sender := accounts[0].addr
+
+ txgroup := []transactions.SignedTxn{
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: makeTxnHeader(sender),
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: sender,
+ Amount: basics.MicroAlgos{Raw: 0},
+ },
+ },
+ },
+ }
+
+ // should catch missing signature
+ _, missingSignatures, err := s.Simulate(txgroup)
+ require.NoError(t, err)
+ require.True(t, missingSignatures)
+
+ // add signature
+ signatureSecrets := accounts[0].sk
+ txgroup[0] = txgroup[0].Txn.Sign(signatureSecrets)
+
+ // should not error now that we have a signature
+ _, missingSignatures, err = s.Simulate(txgroup)
+ require.NoError(t, err)
+ require.False(t, missingSignatures)
+
+ // should error with invalid signature
+ txgroup[0].Sig[0] += byte(1) // will wrap if > 255
+ _, _, err = s.Simulate(txgroup)
+ require.ErrorAs(t, err, &simulation.InvalidTxGroupError{})
+ require.ErrorContains(t, err, "one signature didn't pass")
+}
+
+// TestInvalidTxGroup tests that a transaction group with invalid transactions
+// is rejected by the simulator as an InvalidTxGroupError instead of a EvalFailureError.
+func TestInvalidTxGroup(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ l, accounts, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+ receiver := accounts[0].addr
+
+ txgroup := []transactions.SignedTxn{
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.PaymentTx,
+ // invalid sender
+ Header: makeTxnHeader(ledgertesting.PoolAddr()),
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: receiver,
+ Amount: basics.MicroAlgos{Raw: 0},
+ },
+ },
+ },
+ }
+
+ // should error with invalid transaction group error
+ _, _, err := s.Simulate(txgroup)
+ require.ErrorAs(t, err, &simulation.InvalidTxGroupError{})
+ require.ErrorContains(t, err, "transaction from incentive pool is invalid")
+}
+
+const accountBalanceCheckProgram = `#pragma version 4
+ txn ApplicationID // [appId]
+ bz end // []
+ int 1 // [1]
+ balance // [bal[1]]
+ itob // [itob(bal[1])]
+ txn ApplicationArgs 0 // [itob(bal[1]), args[0]]
+ == // [itob(bal[1])=?=args[0]]
+ assert
+ b end
+end:
+ int 1 // [1]
+`
+
+func TestBalanceChangesWithApp(t *testing.T) {
+ // Send a payment transaction to a new account and confirm its balance within an app call
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ l, accounts, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+ sender := accounts[0].addr
+ senderBalance := accounts[0].acctData.MicroAlgos.Raw
+ sendAmount := senderBalance - 500000
+ receiver := accounts[1].addr
+ receiverBalance := accounts[1].acctData.MicroAlgos.Raw
+
+ // Compile approval program
+ ops, err := logic.AssembleString(accountBalanceCheckProgram)
+ require.NoError(t, err, ops.Errors)
+ approvalProg := ops.Program
+
+ // Compile clear program
+ ops, err = logic.AssembleString(trivialAVMProgram)
+ require.NoError(t, err, ops.Errors)
+ clearStateProg := ops.Program
+
+ futureAppID := 1
+ txgroup := []transactions.SignedTxn{
+ // create app
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.ApplicationCallTx,
+ Header: makeTxnHeader(sender),
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: 0,
+ ApprovalProgram: approvalProg,
+ ClearStateProgram: clearStateProg,
+ LocalStateSchema: basics.StateSchema{
+ NumUint: 0,
+ NumByteSlice: 0,
+ },
+ GlobalStateSchema: basics.StateSchema{
+ NumUint: 0,
+ NumByteSlice: 0,
+ },
+ },
+ },
+ },
+ // check balance
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.ApplicationCallTx,
+ Header: makeTxnHeader(sender),
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: basics.AppIndex(futureAppID),
+ Accounts: []basics.Address{receiver},
+ ApplicationArgs: [][]byte{uint64ToBytes(receiverBalance)},
+ },
+ },
+ },
+ // send payment
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: makeTxnHeader(sender),
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: receiver,
+ Amount: basics.MicroAlgos{Raw: sendAmount},
+ },
+ },
+ },
+ // check balance changed
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.ApplicationCallTx,
+ Header: makeTxnHeader(sender),
+ ApplicationCallTxnFields: transactions.ApplicationCallTxnFields{
+ ApplicationID: basics.AppIndex(futureAppID),
+ Accounts: []basics.Address{receiver},
+ ApplicationArgs: [][]byte{uint64ToBytes(receiverBalance + sendAmount)},
+ },
+ },
+ },
+ }
+
+ err = attachGroupID(txgroup)
+ require.NoError(t, err)
+
+ _, _, err = s.Simulate(txgroup)
+ require.NoError(t, err)
+}
+
+// TestBalanceChangesWithApp tests that the simulator's transaction group checks
+// allow for pooled fees across a mix of signed and unsigned transactions.
+// Transaction 1 is a signed transaction with not enough fees paid on its own.
+// Transaction 2 is an unsigned transaction with enough fees paid to cover transaction 1.
+func TestPooledFeesAcrossSignedAndUnsigned(t *testing.T) {
+ partitiontest.PartitionTest(t)
+ t.Parallel()
+
+ l, accounts, makeTxnHeader := prepareSimulatorTest(t)
+ defer l.Close()
+ s := simulation.MakeSimulator(l)
+ sender1 := accounts[0].addr
+ sender2 := accounts[1].addr
+
+ txnHeader1 := makeTxnHeader(sender1)
+ txnHeader2 := makeTxnHeader(sender2)
+ txnHeader1.Fee = basics.MicroAlgos{Raw: txnHeader1.Fee.Raw - 100}
+ txnHeader2.Fee = basics.MicroAlgos{Raw: txnHeader2.Fee.Raw + 100}
+
+ // Send money back and forth
+ txgroup := []transactions.SignedTxn{
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: txnHeader1,
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: sender2,
+ Amount: basics.MicroAlgos{Raw: 1000000},
+ },
+ },
+ },
+ {
+ Txn: transactions.Transaction{
+ Type: protocol.PaymentTx,
+ Header: txnHeader2,
+ PaymentTxnFields: transactions.PaymentTxnFields{
+ Receiver: sender1,
+ Amount: basics.MicroAlgos{Raw: 0},
+ },
+ },
+ },
+ }
+
+ err := attachGroupID(txgroup)
+ require.NoError(t, err)
+
+ // add signature to txn 1
+ signatureSecrets := accounts[0].sk
+ txgroup[0] = txgroup[0].Txn.Sign(signatureSecrets)
+
+ _, _, err = s.Simulate(txgroup)
+ require.NoError(t, err)
+}
diff --git a/ledger/testing/randomAccounts.go b/ledger/testing/randomAccounts.go
index c3c559911a..6faaaa27e5 100644
--- a/ledger/testing/randomAccounts.go
+++ b/ledger/testing/randomAccounts.go
@@ -34,6 +34,16 @@ import (
var testPoolAddr = basics.Address{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
var testSinkAddr = basics.Address{0x2c, 0x2a, 0x6c, 0xe9, 0xa9, 0xa7, 0xc2, 0x8c, 0x22, 0x95, 0xfd, 0x32, 0x4f, 0x77, 0xa5, 0x4, 0x8b, 0x42, 0xc2, 0xb7, 0xa8, 0x54, 0x84, 0xb6, 0x80, 0xb1, 0xe1, 0x3d, 0x59, 0x9b, 0xeb, 0x36}
+// PoolAddr returns a copy of the test pool address
+func PoolAddr() basics.Address {
+ return testPoolAddr
+}
+
+// SinkAddr returns a copy of the test sink address
+func SinkAddr() basics.Address {
+ return testSinkAddr
+}
+
// RandomAddress generates a random address
func RandomAddress() basics.Address {
var addr basics.Address
diff --git a/node/node.go b/node/node.go
index e87aad9338..155c5c2ede 100644
--- a/node/node.go
+++ b/node/node.go
@@ -42,6 +42,7 @@ import (
"github.com/algorand/go-algorand/data/transactions/verify"
"github.com/algorand/go-algorand/ledger"
"github.com/algorand/go-algorand/ledger/ledgercore"
+ "github.com/algorand/go-algorand/ledger/simulation"
"github.com/algorand/go-algorand/logging"
"github.com/algorand/go-algorand/network"
"github.com/algorand/go-algorand/network/messagetracer"
@@ -545,6 +546,13 @@ func (node *AlgorandFullNode) broadcastSignedTxGroup(txgroup []transactions.Sign
return nil
}
+// Simulate speculatively runs a transaction group against the current
+// blockchain state and returns the effects and/or errors that would result.
+func (node *AlgorandFullNode) Simulate(txgroup []transactions.SignedTxn) (vb *ledgercore.ValidatedBlock, missingSignatures bool, err error) {
+ simulator := simulation.MakeSimulator(node.ledger)
+ return simulator.Simulate(txgroup)
+}
+
// ListTxns returns SignedTxns associated with a specific account in a range of Rounds (inclusive).
// TxnWithStatus returns the round in which a particular transaction appeared,
// since that information is not part of the SignedTxn itself.
diff --git a/test/testdata/configs/config-v26.json b/test/testdata/configs/config-v26.json
index 31d693f90a..57dcf74f1e 100644
--- a/test/testdata/configs/config-v26.json
+++ b/test/testdata/configs/config-v26.json
@@ -38,6 +38,7 @@
"EnableBlockServiceFallbackToArchiver": true,
"EnableCatchupFromArchiveServers": false,
"EnableDeveloperAPI": false,
+ "EnableExperimentalAPI": false,
"EnableGossipBlockService": true,
"EnableIncomingMessageFilter": false,
"EnableLedgerService": false,