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{ - "H4sIAAAAAAAC/+x9+3PcNtLgv4Ka/ar8uOFIfmXXqtr6TrGSrM6PuCxt9u6zfAmG7JnBigMwBCjNxKf/", - "/QoNgARJgMORFHvz1f5ka4hHo9Fo9BufJ6lYF4IDV3Jy9HlS0JKuQUGJf9E0FRVXCcv0XxnItGSFYoJP", - "jtw3IlXJ+HIynTD9a0HVajKdcLqGpo3uP52U8GvFSsgmR6qsYDqR6QrWVA+stoVuXY+0SZYisUMcmyFO", - "TyY3Ax9olpUgZR/KH3m+JYyneZUBUSXlkqb6kyTXTK2IWjFJbGfCOBEciFgQtWo1JgsGeSZnbpG/VlBu", - "vVXayeNLumlATEqRQx/OV2I9ZxwcVFADVW8IUYJksMBGK6qInkHD6hoqQSTQMl2RhSh3gGqA8OEFXq0n", - "Rx8nEngGJe5WCuwK/7soAX6DRNFyCWryaRpa3EJBmSi2Dizt1GK/BFnlShJsi2tcsivgRPeakbeVVGQO", - "hHLy4ftX5NmzZy/1QtZUKcgskUVX1czur8l0nxxNMqrAfe7TGs2XoqQ8S+r2H75/hfOf2QWObUWlhPBh", - "OdZfyOlJbAGuY4CEGFewxH1oUb/uETgUzc9zWIgSRu6JaXyvm+LP/1V3JaUqXRWCcRXYF4Jfifkc5GFe", - "9yEeVgPQal9oTJV60I+HyctPn59Mnxze/OnjcfJf9s8Xz25GLv9VPe4ODAQbplVZAk+3ybIEiqdlRXkf", - "Hx8sPciVqPKMrOgVbj5dI6u3fYnua1jnFc0rTScsLcVxvhSSUEtGGSxolSviJiYVzzWb0qNZaidMkqIU", - "VyyDbKq57/WKpSuSUmmGwHbkmuW5psFKQhajtfDqBg7TjY8SDdet8IEL+tdFRrOuHZiADXKDJM2FhESJ", - "HdeTu3Eoz4h/oTR3ldzvsiLnKyA4uf5gLlvEHdc0nedbonBfM0IlocRdTVPCFmQrKnKNm5OzS+xvV6Ox", - "tiYaabg5rXtUH94Y+nrICCBvLkQOlCPy3Lnro4wv2LIqQZLrFaiVvfNKkIXgEoiY/xNSpbf9f539+I6I", - "krwFKekS3tP0kgBPRRbfYztp6Ab/pxR6w9dyWdD0Mnxd52zNAiC/pRu2rtaEV+s5lHq/3P2gBClBVSWP", - "AWRG3EFna7rpT3peVjzFzW2mbQlqmpSYLHK6nZHTBVnTzV8PpxYcSWiekwJ4xviSqA2PCml67t3gJaWo", - "eDZChlF6w7xbUxaQsgWDjNSjDEBip9kFD+P7wdNIVh44bpAoOPUsO8DhsAnQjD66+gsp6BI8kpmRv1vO", - "hV+VuAReMzgy3+KnooQrJipZd4rAiFMPi9dcKEiKEhYsQGNnFh2ae5g2lr2urYCTCq4o45BpzotACwWG", - "E0Vh8iYcVmb6V/ScSvjmeewCb76O3P2F6O764I6P2m1slJgjGbgX9Vd7YMNiU6v/COXPn1uyZWJ+7m0k", - "W57rq2TBcrxm/qn3z6GhksgEWohwF49kS05VVcLRBX+s/yIJOVOUZ7TM9C9r89PbKlfsjC31T7n56Y1Y", - "svSMLSPIrGENalPYbW3+0eOF2bHaBJWGN0JcVoW/oLSllc635PQktslmzH0J87hWZX2t4nzjNI19e6hN", - "vZERIKO4K6hueAnbEjS0NF3gP5sF0hNdlL/pf4oi171VsQihVtOxvW/RNmBtBsdFkbOUaiR+sJ/1V80E", - "wGgJtGlxgBfq0WcPxKIUBZSKmUFpUSS5SGmeSEUVjvQfJSwmR5M/HTTGlQPTXR54k7/Rvc6wk5ZHjYyT", - "0KLYY4z3Wq6RA8xCM2j8hGzCsD2UiBg3m6hJiWkWnMMV5WrW6CMtflAf4I92pgbfRpQx+O7oV1GEE9Nw", - "DtKIt6bhA0k81BNEK0G0orS5zMW8/uHhcVE0GMTvx0Vh8IGiITCUumDDpJKPcPm0OUn+PKcnM/KDPzbK", - "2YLnW305GFFD3w0Le2vZW6w2HNk1NCM+kAS3U5QzvTUODVqGvw+KQ51hJXIt9eykFd34b7atT2b691Gd", - "/xgk5uM2TlyoRVnMGQUGf/E0l4cdyukTjrXlzMhxt+/tyEaPEiaYW9HK4H6acQfwWKPwuqSFAdB+MXcp", - "46iBmUYG1jty05GMLgizd4Y9WkOobn3Wdp6HICRICh0Yvs1Fevk3Klf3cObnbqz+8cNpyApoBiVZUbma", - "TUJShn+8mtHGHDHdELV3MvemmtVLvK/l7VhaRhX1lmbhDYslBvXYD5kelAHd5Uf8D82J/qzPtmb9ZtgZ", - "OUcGJs1xth6ETKvyRkEwM+kGaGIQZG20d6K17r2gfNVMHt6nUXv0nTEY2B2yi8AdEpt7Pwbfik0Ihm/F", - "pncExAbkfdCHHgfFSAVrOQK+EwuZwP236KNlSbd9JOPYY5CsF6hFV4mngfs3vp6lsbwez0V5O+7TYSuc", - "NPZkQvWoHvOddpCETasisaQYsEmZBp2BGhfeMNPoDh/CWAsLZ4r+DliQetT7wEJ7oPvGglgXLId7IP1V", - "kOnPqYRnT8nZ345fPHn689MX32iSLEqxLOmazLcKJHlodTMi1TaHR/2VoXZU5So8+jfPnRWyPW5oHCmq", - "MoU1LfpDGeumEYFMM6Lb9bHWRjOuugZwzOE8B83JDdqJMdxr0E6Y1BLWen4vmxFDWNbMkhELSQY7iWnf", - "5TXTbP0lltuyug9VFspSlAH7Gh4xJVKRJ1dQSiYCrpL3tgWxLZx4W3R/N9CSayqJnhtNvxVHgSJAWWrD", - "x/N9M/T5hje4GeT8Zr2B1dl5x+xLG/nOkihJAWWiNpxkMK+WLU1oUYo1oSTDjnhH/wDqbMtTtKrdB5HG", - "1bQ142jil1ueejqb3qgcsmVrE+6um3Wx4uxzZqoHMgCORscb/Ixq/Qnkit67/NKdIAT7K7eRBliS6Yao", - "Bb9hy5XyBMz3pRCL+4cxNEsIUPxgxPNc9+kL6e9EBnqxlbyHy7gZrKF1vac+hdO5qBShhIsM0KJSyfA1", - "HXHLoz8Q3ZjKv/nVykjcc9CElNJKr7YqCDrpepyj6ZjQ1FBvgqiRES9G7X4yrcx0xuWbl0AzrdUDJ2Ju", - "XQXWiYGLpOhhVO6is0JC4Cy14CpKkYKUkCXWRLETNNfOMBE1gCcEHAGuZyFSkAUt7wzs5dVOOC9hm6A/", - "XJKHr3+Sj74CvEoomu9ALLYJobdW+Kw/qA/1uOmHCK47uU92tATieK7WLjWDyEFBDIV74SS6f12Iert4", - "d7RcQYmemd+V4t0kdyOgGtTfmd7vCm1VRKK8rKJzztZot+OUCwmp4JkMDpZTqZJdbFk3amljegUeJwxx", - "Yhw4IpS8oVIZbyLjGRpBzHWC8xgBRU8RBzgqkOqRf3KyaH/sVN+DXFayFkxlVRSiVJCF1sBhMzDXO9jU", - "c4mFN3Yt/SpBKgm7Ro5hyRvfIsusxCCIqtrobt3t/cWhaVrf89sgKltANIgYAuTMtfKw60e6RABhskG0", - "IRwmO5RTh9dMJ1KJotDcQiUVr/vF0HRmWh+rvzdt+8RFVXNvZwL07MrBZCG/Npg1MU4rqlVoHJms6aWW", - "PVAhNm7PPsz6MCaS8RSSIcrXx/JMt/KPwI5DGrFF2ChKb7bO4ejQb5DookSwYxdiC44YRt7TUrGUFSgp", - "vobtvQvO3QmC5nqSgaJMK+veByNEF35/YvzY3TFvJ0iP0mH74PeU2MBycibxwmgDfwlb1FjemwCpcy+s", - "6h40gcCo+nRTThBQF3ahBRi/CWxoqvKtvubUCrbkGkogspqvmVIm4q2tKChRJP4AQfvgwIzWGG6Ci9wO", - "jLHOn+FQ3vL6WzGdGIlqGL7zjljVQoeVpAoh8hG6dw8ZQQhG+U1JIfSuMxtg6aLwHCW1gLRCDHpCaub5", - "QLbQjCsg/0dUJKUcBdZKQX0jiBLZLF6/egZ9gdVzWg9pgyHIYQ1GDscvjx93F/74sd1zJskCrl1Usm7Y", - "Rcfjx6gFvxdStQ7XPVha9HE7DfB2NJzqi8LKcF2esttDZ0ces5PvO4PX1lZ9pqS0hKuXf2cG0DmZmzFr", - "92lknHcSxx1lE/WGDq0b9x3NPL+PjaYZOgRdf2LPqd58jPnVtXyVb++BT5uBSAlFCRJPla+XSPNVLPzA", - "dXvs5FYqWPdNN6brzxHB5oMTC3pSpuA545CsBYdtMFeLcXiLH0O9zcmOdEYeG+vbFZta8HfAas8zhgrv", - "il/cbY+U39cBJfew+d1xO1Y7P2QftVLIC0JJmjPUWQWXqqxSdcEpSsXeWQ443pysH9eTXrkmYcUsoDfZ", - "oS44RadrLSsHnQULCGjB3wM4dUlWyyVI1ZEPFgAX3LZinFScKZxrrfcrMRtWQIner5lpuaZbsqA5qnW/", - "QSnIvFLtGxMji6XSWpcxIeppiFhccKpIDloDfcv4+QaHcyZ4RzMc1LUoL2sszILnYQkcJJNJ2EH4g/mK", - "sRt2+Ssbx4FpXuazMTrp8Zvw462CVurS/334n0cfj5P/oslvh8nL/3Hw6fPzm0ePez8+vfnrX/9f+6dn", - "N3999J//EdopB3so7tVCfnpipcnTExQZGqtTD/YvZnFYM54Eicz3rXRoizzUgo8joEeNWc/u+gVXG64J", - "6YrmLKPqduTQZXG9s2hOR4dqWhvRUSDdWve8iO/AZUiAyXRY462v8b5PPRxhjmZQGzSO52VRcbOVlbSm", - "WAygdL5NsZjWWQQme/iIYIj5ijrHvP3z6YtvJtMmNLz+rvVr8/VTgJJZtgklAGSwCclX9oDgwXggSUG3", - "ElSYeyDsQTeu8Sb5w65BC+ZyxYovzymkYvMwh3NhaVZP2/BTbuLF9PlBo+rW2mrE4svDrUqADAq1CmUV", - "tiQFbNXsJkDH0VWU4gr4lLAZzLp6UrYE6RzKOdAFZrehYVCMCbOtz4EhNEcVHtb9hYxSRkL0g8Kt5dY3", - "04m9/OW9y+N24BBc3TlrC6r7Wwny4IfvzsmBZZjygclFMUN72QMB+4MNkG25QDU3M7nUJhnngl/wE1gw", - "zvT3owueUUUP5lSyVB5UEspvaU55CrOlIEcu5vaEKnrBe5JWtNyBF+1Mimqes5Rc+hJxQ54mhbU/wsXF", - "R5ovxcXFp543qC+/2qmC/MVMkFwztRKVSmyOXlLCNS2zAOiyztHCkU2G7dCsU2LHNqzY5gDa8cM8jxaF", - "7OZq9JdfFLlevkeG0mYi6C0jUonSySJaQDHQ4P6+E/ZiKOm1S/CsJEjyy5oWHxlXn0hyUR0ePgPSSl74", - "xV75mia3BbQsVbfKJelaqXDhRq+BjSppUtAlyODyFdACdx/l5TXaRPOcYLdW0oQLCsOhmgU4fMQ3wMCx", - "dwA4Lu7M9HLFFsJLwE+4hdhGixuNq+G2++WlUdx6uzqpGL1dqtQq0Wc7uCqpSdztTJ2DvdRClvP/SLbE", - "GBubrj4Hkq4gvYQMM2dhXajttNXduRitoOlYB5Mmw9wEQWMaJBr15kCqIqNWFKd8281Hk6CUC/L5AJew", - "PRdNFuU+CWjtfCgZO6hIqZ50qYnVP7Z2jO7mWz825oAUhUsrwvhyRxZHNV24PvGDbETeezjEIaJo5evE", - "EEHLACIM8UdQcIuF6vHuRPqh5WktY25uvkBCuuP9xDZplCfrcvZXg2lI5vsasFyFuJZkTrXcLmylBZPz", - "43GxStIlRCRk3646MrOmZYvFQXbde8GbTiy6F1rvvgmCbBones1BSgH9RZMKKjOdQAM3kzHd4wpmBAso", - "WYTNcxST6ogMw3Ro2bJvm4owMdDCBAwlbwQOB0YbI75ks6LSFYHAWhnuLI+SAX7HHLahzOVTz0fuFcSo", - "85Idz+2e0552afOXXdKyy1T2VcsRWcdawsewvNB2CI4CUAY5LM3CTWNHKE0+XbNBGo4fF4uccSBJyN1O", - "pRQpM1U8mmvGzgFaPn5MiDEBk9EjhMjYAxtdUjgweSf8s8mX+wDJbT4gdWOjM8v7G8KhyyYATYs8otAs", - "nPFIqKPjANTGaNT3VydSCIchjE+JZnNXNNdszmp8zSC9BFoUWzvpstYp+igmzg5Y4M3FsteazFV0m9X4", - "MpMDOizQDUA8F5vE5C4EJd75Zq7pPRiTh5kUoYNpUpUfSDIXG3S049ViYsB2wBKHw4HhafgbJpFesV/s", - "NjfADE07LE2FqFAiyVhzXk0uMXFizNQRCSZGLg+97ONbAdAxdjR1+qzyu1NJbYsn/cu8udWmTVUNF+4c", - "Ov6xIxTcpQj++laYOl/YmhA+QCrKLG6n0ITKVF34sG9esGUbNd8YnVE8UITxuK1tOBWiv3MRf3ALnmae", - "AUScmGD9HiTfbQqhpVsTzG8yuy1SjJxYgslRksZmJRlf5lYwiKEptGAXjeIwbpbcVGpxA46TnUObG1Hy", - "h2ApijAc+2gqHyx+BqCInPIGDpTD7wiJze4ehOUmTh/vu6J98KC0AyvaNQU8XSt0O2jy6Xsz+z5TCTmg", - "9py0tI3kMuTjvrj4KAFFszPXzbPyYeUCyrePvGidEpZMKmi8TVqCdZj+0nZ8igWThFjEV6eKcqHX90GI", - "Wp4zFTmwY2uZX3wFV0JBsmClVAm66oJL0I2+l2h9+l43DSsV7XggUzuQZeFLFKe9hG2SsbwK06ud9/WJ", - "nvZdLTvIao6CCeMEaLoic6x1GYwSHJjaBJIOLviNWfAbem/rHXcadFM9canJpT3HH+RcdG66IXYQIMAQ", - "cfR3LYrSgQvUy43rc0dPwTCHE6/T2ZCboneYMjf2zvgql6EXE+bMSANrwdCgaFhmICCHLEtRFYapN2Wu", - "g1lsXKikZfwIoKs28EhFL00mRnuD+bK2qYTDpoxePWpo23bHgHz8eHz3cFYITnK4gnx3+CtFjDsDDkZG", - "mBEw9IZgILmL8dgt1fd3oEFYvdIujEFq6Uk3Q47bRjWyhaca3RoJVuPOpoyO9t5pCc3RW0PffdddUSQZ", - "5BBM0PiHl4FBiwLTrF3jULKCHozxDDZhcMynaagYdd94XzGuTOHC+6qJ1hln/LL9ymFjUFCYGlf7112L", - "65jeLvloji8qQpS1c2CQEePgtWbnlfHvUl/kGqdFwbJNx+9pRo1ax+8FY3hB2cF2YMCjjVDqTwmyXTGu", - "MeaZusWtgi2zUZg5b9d182UafyomXdX9PqLq1MBduDoHmr+G7U+6LS5ncjOd3M1NGsK1HXEHrt/X2xvE", - "M4bhGbdZK+phT5TToijFFc0T60yOkWYprixpYnPne/7C0lqY651/d/zmvQX/ZjpJc6BlUms70VVhu+IP", - "sypTnC5yQFxV7xVVtX3OaMPe5tcVtXwH9PUKbAVlT6HulXpsggu8o2gd0otwNPBO97KNgzBLHIiHgKIO", - "h2hcdSYaoh0BQa8oy52PzEEbidzFxY27G4NcwR/gzpEU/l10r+ymd7rDp6Ohrh08yZ9roMbz2pQxl0Tw", - "bric1oLR9YakuqZYqNF4QPrMiVdr9BokMmdp2J/K51ITBzdxMroxwcYRfVqPWLFI2BWvmDeWbiZHGLU7", - "QHpzBJHpin7GcDcX9v2ZirNfKyAsA670pxJPZeegov3Uetb712lYqrQDG298M/xdZAy/SGn3xrMy15CA", - "4Ufl9MA9qa1+bqG190n/4IUf7BHc58/YuxIHAvMsfVhqNokKq3Z0zWgJfedbNc7+ZqulRuYIvj3DZLIo", - "xW8QNlWhhS+QF+jKsjKMaP0N+CwgrndZTO3JaZ7QaWaPbndMuvE9Tu2AxAjV4857IThYH9J5oyk3W22e", - "gmjFtYcJxs8gOTDjNwRjYe5l3eT0ek5DxTO1kKFh8twvLb+5EsR1dri3PhpmK+XOiBc3VrdlJmO+gLJJ", - "2e1X37mlwGCmHS0qNJIBUq0vE0xNrE8uRWCYil9Tbl4UQW8EHiXbWyv4ziB0LUqsdyHDLv4MUrYOGpcu", - "Lj5mad+dm7ElM+9pVBK8BxvsQOYhIkNF9tELE07XoOZ0QQ6n3pMwdjcydsUkm+eALZ6YFnMqwRhVXOSG", - "66KXB1ytJDZ/OqL5quJZCZlaSYNYKUgt1KF6UweqzEFdA3ByiO2evCQPMURHsit4pLFo7+fJ0ZOX6GA1", - "fxyGLgD7cM4QN8mQnTj9P0zHGKNkxtCM2446C1oDzGtnccY1cJpM1zFnCVtaXrf7LK0pp0sIR4Wud8Bk", - "+uJuoi+ggxeemad6pCrFljAVnh8U1fwpkmmm2Z8Bg6RivWZqbQM5pFhrempeYzCTuuHMuz+2kK6Dy33E", - "eKjChYN0lMgv6/cx91to1Ri19o6uoY3WKaGmyEnOmkhFV96bnLoaSlhZuC4obHCj59JLRzEHAxcXpCgZ", - "V6hYVGqR/IWkK1rSVLO/WQzcZP7N80A15XZVT74f4F8c7yVIKK/CqC8jZO9kCNuXPOSCJ2vNUbJHTWan", - "dyqjgVvhEJ1YnNDw0GOFMj1KEiW3qkVu1OPUdyI8PjDgHUmxXs9e9Lj3yr44ZVZlmDxopXfo7x/eWClj", - "LcpQYcTmuFuJowRVMrjCOP3wJukx77gXZT5qF+4C/dd1njqR0xPL3FmOKgL7eHw83QB9Pn5k4m28PW1P", - "T0vmCrp9UMMZ5wExjwXu8nvc5RmRVud9oHIcehx0ESNCKwG2g7H9NOC7mxg8l09rh2I4ai8tRJnfisCS", - "Xe352sdjMyYDdqvYBaI/aAY1t0NNSbvO95ePqHFukX5kh/7iYMU/usB+ZWaDSHYriGyi9wZBcDuz+rsX", - "XEbJt2IzdlM7vNtt7L8AaoIoqVie/dTUBuk88VBSnq6CwSJz3fHn5jG6enHmMAcrY64o5yYaoW+bQC3l", - "Z6fNBPStf4qx86wZH9m2++qEWW5ncQ3gbTAdUG5CjV6mcj2Bj9V22YU6rS9fiozgPE0ZxuZe779W4tWU", - "/7UCqUL3In4wqQVoUV9oKjal3YFnaMeYkR/MY9IrIK0qcWg/YOsqNxXHTIFt4+qpilzQbEr0OOffHb8h", - "ZlbTxzypZEqqL82121pFPD53n0Dbodja+8jo06uWCos2SkXXRahEiW5x7hpgHRTfu4SKtY+dGTkxNg3p", - "NGYziaaHBSvXkJF6OitVI03o/yhF0xUaC1osNU7y498CcFQpvfc363e06rKreO403PY5APMawJQILTlc", - "M2neEIYraFdFqUsEWTHAVUlpL6+sODeUEpSKh0pY3QbtDjgTBekcUEHIOojfU3qxYep7Po1whr2CdQy7", - "7yz0Ht40NTbq95Hc2/Ap5YKzFKsIhq5m+x7xGO/siIKL4cwAG28jJ4HDFXzdoU7WsFiMvvfgGKFFXN89", - "5H3Vm2qow/yp8OHbFVVkCUpazgbZ1D1SYi3UjEuwZXTxaWqPT4qy5fFGDhkMomjk5D3JCJOzIyaH7/W3", - "d9YghVmLl4yj6ulyJEyCpLEh43OpSuurTJGlwAwKeyj8NX3UfWZYrCWDzaeZe14VxzAOY71sEx3RH+rY", - "xUrY2ATd9pVuawrqNT+38uDMpMdFYSeNP2ETlAfUhkcRHPB514FeHnLr8f3RBshtMMgJ71NNaHCFIRJQ", - "EJsaE3nOpZMEo4VWQ1HYgpj46GAdrWCY6BvGoXn8N3BBpMErATcGz2ukn0xLqowIOIqnnQPNMS4ixNCk", - "sk6xuw7V2WAbT1qkEzdHfBubl2gijKNu0AhulG/rN4c1dXvCxCt87Nwisv+uDEpVVoiyyTXtl2ZCjEMz", - "bveWVfsC6B+DvkxkuquSmpOzz00UK1Uyr7IlqIRmWcie8C1+JfiVZBVKDrCBtKrrNxcFSbEyX7tUYZ/a", - "7ESp4LJaD8zlGtxxOu/ppgA1+M9HuR3GwOv5Fv8NFS+O74wND9o7xt7FAmV1+tw+cnN7pJ7Uq2k6kWyZ", - "jMcE3il3R0cz9e0Ivel/r5Sei2UbkC9coGyIy/l7FOJv3+mLw6/f1avIba6WurwWhoMK9+Amqo11YZg2", - "V3JZp705vQf9hg0Q8af5pnj5RfJaPFsvNfer8WvHslvSaDIWVbZ+gqJkkAVFc9JNXJnJPkcowjb9WCyZ", - "CSXTn3u9x0mGPTkbxx5EqAtS7AP02kVAk4IyG7TRMIs+Zm26V9xcOHTomg3uLsImUUUtdq+vYglPLg/Y", - "ZHZ0HjO7BFtUqSjhionKhUO4eDmnEppf7WPSXl5xdP39uBmc6uuaQaNG23P7cIZZptXJX/9koisJcFVu", - "/wVMuL1N7z0FF6pZ3HoIzgpXQXuTGntXntSvyV1eJWuRDSVMv/6JnDjf0qh7xxFyqNySyOzzS8Fk8Te2", - "+L9rpqXP0dO+tZ2Oi2J46kiGeH9y03Df6WOlpvT5HLK6vXfn1zyg55sQArqKl87MYaPCT+X0smGvgcCm", - "AKx16yU2x6tnjCUom+SI2mqSA5UwgGG/apttOxLJ55s3uv24ZPvwE4bxkrNNmVlknoWQrHmWJfS24ciQ", - "43N8ntDzGPbHcvF+V5AqUbbimEqAfQro6sm8d3P/XXo2YiipI7Md/Q+UmZ1OfN4STFS0x4s2JXLQq4Yu", - "10CpetMmwOxtZ6YPSQVTN4T+YUFzGX6lKhrs2ql84gWsBAo9hxd2mo2o9m2XM/ViIFg2jMhwJoAJ/v7v", - "iUwT136/6Oy91jSsVfQKL3jFQ8yjOrM9AkjqKGqUDHG/lsDtk8qLEGp2Z0UtFpAqdrWj0MU/VsC9IgpT", - "ZwlGWBZe3QtWZ9lgQdH9/RwNQEN1KAbh8Qr73xmcWI7oJWwfSNKihuArP1Mn3N+mliRiAG8tLXgUQoai", - "FI3rygaOMVlTBmLBRQWb7tBU5Y4+r+jJObecy5FkW+IZmPJKhGzfo+bSXfeqBIYJI7FaGP0HzuIWjxN8", - "T07WTx+7WpS+XZCc9iv2X9talliWpPbWuqqWIN1vrgaRmSVnl+A/AIm+cSyhYFsEjb3OjpwMyEm97G/3", - "OFcX6EU9M2tyOPr5voEa0Bj9lOZCK8FJLN2pnTZRh3k9kCY4FMUUfDkO4VpAaR/KxZshFxISJVxo3RAc", - "Q6gwEbC3QoKMvrtggItWQ/3QlHvF92dMsQxqA1/9BZIS1lRDV3pFWeNzDiH7lfnuElxdTa6dNu2aXpOd", - "VVVd9g6TPST6VL8g9rbcnTh7G/M249w8yy9DMYVco9L3vxalyKrUFoLxDkbtAhhdsGyAlQQtw2l/lT0j", - "X47VwN94ZQguYXtg7C/pivKlV17Nh96I9mYNXuWyzm7fq+U/bOTMl2YBy3uB82taz6eTQog8iThcT/uF", - "Zrtn4JKll1rMrpq498gTi+Qh+vnqiJrr1dYVVi0K4JA9mhFyzE2mkQuuab901JmcP1BD829w1qwytZ+t", - "YX92wcMpG1jUp7wjf3PDDHM1CZr53XEqM8iOMqabSJHbkl4HHhztx9ONDnfpPgLZEJWBIiSl3LJU16jz", - "3TfuB0jfewVxWPvxK/k1Ucyl8RGhtOQ8N13h5W3j+hn3HqPrsAM831jjvcjouJEF5yuHGr+tkeItJUoJ", - "reXvsv/YBTZ8ydsiiVmTepmmALEJU2vvi2fck69qm1kYz33TGpbtExxr/vZNchJ9hqYMq0c4+lyWVzT/", - "8mY1rOd4jPiwz4qHF+rrvz6SDSrl7eL93tBRc3u67v1Nzd+jGfAfoPco6Oy1Q1nnT/0SpnORYYl7mpNc", - "NC/i4pDkGsc03uEn35C5zaIrSkiZZJ0E42v3qkmt7uEjX81r88P65a51/iTUHcjYKgiiIO+aFxKUwPuh", - "gbA5ol+ZqURObpDKQ9TXI4sA/kI8yi9ns+O6uGy5jc2LM514SFHCPbuPvUCwPd3H/UI9Y5dnXKT60qkk", - "9Nc5+rZu4TZwUTdrGxv70EfuUBn9MSEL4dcxdHeMmTAIwadlCIJKfnnyCylhgW9HCvL4MU7w+PHUNv3l", - "afuzPs6PHwfFuC8WLWFwZMew8wYpxjrTeqkwsClYGSn698Eyd3tho/uOYAcIV+fMIfgaDE7t4ka/cClo", - "lLl3GvjN0mzjXfzMQ5lbcj1RCPc/xXIXTHx+JE2mcxYqlme7DmUr6al5+RbTen62Cblf5e3dn40tu88m", - "7fuH+8TIdQ8AIiaw1tbk3lReOtOITCbbLZC3hMSVViVTW6wT5kyf7OdgTM0PtbfEeoHryjJW7lDiEupK", - "c41vpZJOsvlB0BxlAa3PYISiEiKfke82dF3kYJnUXx/M/wzP/vI8O3z25M/zvxy+OEzh+YuXh4f05XP6", - "5OWzJ/D0Ly+eH8KTxTcv50+zp8+fzp8/ff7Ni5fps+dP5s+/efnnB/oO0CAbQCeuKsXkf+MD1cnx+9Pk", - "XAPb4IQW7DVszVuYmozdK5s0RS4Ia8ryyZH76X867jZLxboZ3v06sUnvk5VShTw6OLi+vp75XQ6WaExN", - "lKjS1YGbp/cM5/H70zo9zMRC4Y6azB9NCriplhSO8duH787OyfH701lDMJOjyeHscPYEaxkXwGnBJkeT", - "Z/gTnp4V7vuBKyJ89PlmOjlYAc3RJ67/WIMqWeo+yWu6XEI5s8+N6p+unh44Me7gszUk3wx9O/Bf7jn4", - "3LK3Zzt6YqDLwWdXxGq4datKlPUzeB1GQjHU7GCOGchjm4L0GseXgsqdPPiM6kn09wOblhn+iGqiOQMH", - "zikVbtnC0me10bB2eqRUpauqOPiM/0GavDFMIoeQC8pkM1LSNJ8SpgidixKrR6l0pfmCK1vDpNdygpRq", - "iPw008Ste70yELgCdaZi79HHfgAiDkTcSMgJNJk3B7U1U8OL0e/uFZGtb5pW++a++XiYvPz0+cn0yeHN", - "n/R9Yv988exmpC/5VT0uOasvi5ENP2HNF7SK4/l9eni419PAPbW0WaTZpDocORDEYHYiWccsJ3arOgOR", - "Ghk7alN0hg89pXwznTzfc8WDtrtWiHbgSeRvaUZcgi/O/eTLzX3K0ZOv+Tox99bNdPLiS67+lGuSpznB", - "ll6xsf7W/51fcnHNXUstZFTrNS237hjLFlMgdrPxKqNLiZbckl1RlO244O1y9Z/QexBKso7wG6noLfjN", - "me71b37zpfgNbtJ98Jv2QPfMb57ueeb/+Cv+N4f9o3HYM8Pu7sRhrcBn8tr6EqiJ7D/A+mLb/s9bngZ/", - "7A/UfTI49PPB5/ZLPC0ZWa4qlYlrUx4leClgrWaa28KOaICuFSoliBugCSgkP9qsq3yLVneWAaEY3S4q", - "1Wi8urNzEzfmJT1C85z4knGcAA37OIupYEq9UB0JqeDm8d3OBWQheycy6F9AeMX8WkG5be4YC+Nk2uJA", - "loQC9ULvzND7DONmPwJDB4TxnvWJo35xt/X3wTVlSl9TNrIPMdrvrIDmB7ZwQOfXJlev9wUTEL0fPZ0o", - "/OtBXQ8r+LGrbIa+WmXLNWqsSb51Bve8tst8/KS3Dis2WnJojA1HBwcYDrMSUh1MbqafO4YI/+Onerdc", - "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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", } // 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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", } // 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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", + "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,