diff options
author | chris erway <51567+cce@users.noreply.github.com> | 2022-02-25 11:53:09 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-02-25 11:53:09 -0500 |
commit | 6278dc182def3950d79313963fb0efa6ac1ee517 (patch) | |
tree | 1846889496b07a888d187f335edfadd41b5e3a83 | |
parent | 93ab4fffa2a793a6aff2dc5b9629fd57e77d5e3b (diff) | |
parent | a50feadae33a0b1b1ed12b1cb8c740b3a90eedd8 (diff) |
Merge pull request #3679 from cce/feature/unlimited-assets-api-split-accountresource
REST API: split msgpack API type AccountResourceModel into two
-rw-r--r-- | cmd/goal/application.go | 15 | ||||
-rw-r--r-- | cmd/goal/interact.go | 15 | ||||
-rw-r--r-- | daemon/algod/api/algod.oas2.json | 8 | ||||
-rw-r--r-- | daemon/algod/api/algod.oas3.yml | 12 | ||||
-rw-r--r-- | daemon/algod/api/client/restClient.go | 14 | ||||
-rw-r--r-- | daemon/algod/api/server/v2/generated/private/routes.go | 294 | ||||
-rw-r--r-- | daemon/algod/api/server/v2/generated/routes.go | 390 | ||||
-rw-r--r-- | daemon/algod/api/server/v2/handlers.go | 4 | ||||
-rw-r--r-- | daemon/algod/api/spec/v2/model.go | 44 | ||||
-rw-r--r-- | daemon/algod/api/spec/v2/msgp_gen.go | 368 | ||||
-rw-r--r-- | daemon/algod/api/spec/v2/msgp_gen_test.go | 80 | ||||
-rw-r--r-- | ledger/msgp_gen.go | 64 | ||||
-rw-r--r-- | libgoal/libgoal.go | 4 |
13 files changed, 820 insertions, 492 deletions
diff --git a/cmd/goal/application.go b/cmd/goal/application.go index 0f9553468..9769e8cb5 100644 --- a/cmd/goal/application.go +++ b/cmd/goal/application.go @@ -23,7 +23,9 @@ import ( "encoding/base64" "encoding/binary" "encoding/hex" + "errors" "fmt" + "net/http" "os" "strconv" "strings" @@ -31,6 +33,7 @@ import ( "github.com/spf13/cobra" "github.com/algorand/go-algorand/crypto" + apiclient "github.com/algorand/go-algorand/daemon/algod/api/client" "github.com/algorand/go-algorand/data/abi" "github.com/algorand/go-algorand/data/basics" "github.com/algorand/go-algorand/data/transactions" @@ -955,6 +958,14 @@ var readStateAppCmd = &cobra.Command{ // Fetching local state. Get account information ai, err := client.RawAccountApplicationInformation(account, appIdx) if err != nil { + var httpError apiclient.HTTPError + if errors.As(err, &httpError) && httpError.StatusCode == http.StatusNotFound { + reportErrorf(errorAccountNotOptedInToApp, account, appIdx) + } + reportErrorf(errorRequestFail, err) + } + + if ai.AppLocalState == nil { reportErrorf(errorAccountNotOptedInToApp, account, appIdx) } @@ -981,6 +992,10 @@ var readStateAppCmd = &cobra.Command{ // Get creator information ai, err := client.RawAccountApplicationInformation(app.Params.Creator, appIdx) if err != nil { + reportErrorf(errorRequestFail, err) + } + + if ai.AppParams == nil { reportErrorf(errorAccountNotOptedInToApp, account, appIdx) } diff --git a/cmd/goal/interact.go b/cmd/goal/interact.go index 5192984ea..6b157a50d 100644 --- a/cmd/goal/interact.go +++ b/cmd/goal/interact.go @@ -20,7 +20,9 @@ import ( "encoding/base32" "encoding/base64" "encoding/json" + "errors" "fmt" + "net/http" "os" "strconv" "strings" @@ -28,6 +30,7 @@ import ( "github.com/spf13/cobra" "github.com/algorand/go-algorand/crypto" + apiclient "github.com/algorand/go-algorand/daemon/algod/api/client" "github.com/algorand/go-algorand/data/basics" "github.com/algorand/go-algorand/data/transactions" "github.com/algorand/go-algorand/data/transactions/logic" @@ -673,6 +676,14 @@ var appQueryCmd = &cobra.Command{ // Fetching local state. Get account information ai, err := client.RawAccountApplicationInformation(account, appIdx) if err != nil { + var httpError apiclient.HTTPError + if errors.As(err, &httpError) && httpError.StatusCode == http.StatusNotFound { + reportErrorf(errorAccountNotOptedInToApp, account, appIdx) + } + reportErrorf(errorRequestFail, err) + } + + if ai.AppLocalState == nil { reportErrorf(errorAccountNotOptedInToApp, account, appIdx) } @@ -690,6 +701,10 @@ var appQueryCmd = &cobra.Command{ // Get creator information ai, err := client.RawAccountApplicationInformation(app.Params.Creator, appIdx) if err != nil { + reportErrorf(errorRequestFail, err) + } + + if ai.AppParams == nil { reportErrorf(errorAccountNotOptedInToApp, account, appIdx) } diff --git a/daemon/algod/api/algod.oas2.json b/daemon/algod/api/algod.oas2.json index 6743c5ebe..2e85ac9ab 100644 --- a/daemon/algod/api/algod.oas2.json +++ b/daemon/algod/api/algod.oas2.json @@ -226,7 +226,7 @@ }, "/v2/accounts/{address}/assets/{asset-id}": { "get": { - "description": "Given a specific account public key, this call returns the account's asset holding and asset params (if they exist) about a given asset ID", + "description": "Given a specific account public key and asset ID, this call returns the account's asset holding and asset parameters (if either exist). Asset parameters will only be returned if the provided address is the asset's creator.", "produces": [ "application/json", "application/msgpack" @@ -303,7 +303,7 @@ }, "/v2/accounts/{address}/applications/{application-id}": { "get": { - "description": "Given a specific account public key, this call returns the account's application local state and application params (if they exist) about a given application ID", + "description": "Given a specific account public key and application ID, this call returns the account's application local state and global state (AppLocalState and AppParams, if either exists). Global state will only be returned if the provided address is the application's creator.", "produces": [ "application/json", "application/msgpack" @@ -2676,7 +2676,7 @@ } }, "AccountAssetResponse": { - "description": "AccountAssetResponse describes the asset data for a specific account and asset ID.", + "description": "AccountAssetResponse describes the account's asset holding and asset parameters (if either exist) for a specific asset ID. Asset parameters will only be returned if the provided address is the asset's creator.", "schema": { "type": "object", "required": [ @@ -2699,7 +2699,7 @@ } }, "AccountApplicationResponse": { - "description": "AccountApplicationResponse describes the application data for a specific account and application ID.", + "description": "AccountApplicationResponse describes the account's application local state and global state (AppLocalState and AppParams, if either exists) for a specific application ID. Global state will only be returned if the provided address is the application's creator.", "schema": { "type": "object", "required": [ diff --git a/daemon/algod/api/algod.oas3.yml b/daemon/algod/api/algod.oas3.yml index e00bd752a..c2617a144 100644 --- a/daemon/algod/api/algod.oas3.yml +++ b/daemon/algod/api/algod.oas3.yml @@ -246,7 +246,7 @@ } } }, - "description": "AccountApplicationResponse describes the application data for a specific account and application ID." + "description": "AccountApplicationResponse describes the account's application local state and global state (AppLocalState and AppParams, if either exists) for a specific application ID. Global state will only be returned if the provided address is the application's creator." }, "AccountAssetResponse": { "content": { @@ -271,7 +271,7 @@ } } }, - "description": "AccountAssetResponse describes the asset data for a specific account and asset ID." + "description": "AccountAssetResponse describes the account's asset holding and asset parameters (if either exist) for a specific asset ID. Asset parameters will only be returned if the provided address is the asset's creator." }, "AccountResponse": { "content": { @@ -1870,7 +1870,7 @@ }, "/v2/accounts/{address}/applications/{application-id}": { "get": { - "description": "Given a specific account public key, this call returns the account's application local state and application params (if they exist) about a given application ID", + "description": "Given a specific account public key and application ID, this call returns the account's application local state and global state (AppLocalState and AppParams, if either exists). Global state will only be returned if the provided address is the application's creator.", "operationId": "AccountApplicationInformation", "parameters": [ { @@ -1949,7 +1949,7 @@ } } }, - "description": "AccountApplicationResponse describes the application data for a specific account and application ID." + "description": "AccountApplicationResponse describes the account's application local state and global state (AppLocalState and AppParams, if either exists) for a specific application ID. Global state will only be returned if the provided address is the application's creator." }, "400": { "content": { @@ -2006,7 +2006,7 @@ }, "/v2/accounts/{address}/assets/{asset-id}": { "get": { - "description": "Given a specific account public key, this call returns the account's asset holding and asset params (if they exist) about a given asset ID", + "description": "Given a specific account public key and asset ID, this call returns the account's asset holding and asset parameters (if either exist). Asset parameters will only be returned if the provided address is the asset's creator.", "operationId": "AccountAssetInformation", "parameters": [ { @@ -2085,7 +2085,7 @@ } } }, - "description": "AccountAssetResponse describes the asset data for a specific account and asset ID." + "description": "AccountAssetResponse describes the account's asset holding and asset parameters (if either exist) for a specific asset ID. Asset parameters will only be returned if the provided address is the asset's creator." }, "400": { "content": { diff --git a/daemon/algod/api/client/restClient.go b/daemon/algod/api/client/restClient.go index e9852e7aa..7f8b2d412 100644 --- a/daemon/algod/api/client/restClient.go +++ b/daemon/algod/api/client/restClient.go @@ -78,6 +78,18 @@ func (e unauthorizedRequestError) Error() string { return fmt.Sprintf("Unauthorized request to `%s` when using token `%s` : %s", e.url, e.apiToken, e.errorString) } +// HTTPError is generated when we receive an unhandled error from the server. This error contains the error string. +type HTTPError struct { + StatusCode int + Status string + ErrorString string +} + +// Error formats an error string. +func (e HTTPError) Error() string { + return fmt.Sprintf("HTTP %s: %s", e.Status, e.ErrorString) +} + // RestClient manages the REST interface for a calling user. type RestClient struct { serverURL url.URL @@ -131,7 +143,7 @@ func extractError(resp *http.Response) error { return unauthorizedRequestError{errorString, apiToken, resp.Request.URL.String()} } - return fmt.Errorf("HTTP %s: %s", resp.Status, errorString) + return HTTPError{StatusCode: resp.StatusCode, Status: resp.Status, ErrorString: errorString} } // stripTransaction gets a transaction of the form "tx-XXXXXXXX" and truncates the "tx-" part, if it starts with "tx-" diff --git a/daemon/algod/api/server/v2/generated/private/routes.go b/daemon/algod/api/server/v2/generated/private/routes.go index 8becf9d34..b0da1ad54 100644 --- a/daemon/algod/api/server/v2/generated/private/routes.go +++ b/daemon/algod/api/server/v2/generated/private/routes.go @@ -311,152 +311,154 @@ func RegisterHandlers(router interface { // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", + "iJIpWb2xAAA=", } // GetSwagger returns the Swagger specification corresponding to the generated code diff --git a/daemon/algod/api/server/v2/generated/routes.go b/daemon/algod/api/server/v2/generated/routes.go index 03802f9ea..205900044 100644 --- a/daemon/algod/api/server/v2/generated/routes.go +++ b/daemon/algod/api/server/v2/generated/routes.go @@ -737,200 +737,202 @@ func RegisterHandlers(router interface { // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "LpdSsnPMSvnh8v8FAAD//6WlkWzfDwEA", + "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", } // GetSwagger returns the Swagger specification corresponding to the generated code diff --git a/daemon/algod/api/server/v2/handlers.go b/daemon/algod/api/server/v2/handlers.go index 9ad25ca41..17963f46f 100644 --- a/daemon/algod/api/server/v2/handlers.go +++ b/daemon/algod/api/server/v2/handlers.go @@ -438,7 +438,7 @@ func (v2 *Handlers) AccountAssetInformation(ctx echo.Context, address string, as // return msgpack response if handle == protocol.CodecHandle { - data, err := encode(handle, model.AccountResourceToAccountResourceModel(record)) + data, err := encode(handle, model.AccountResourceToAccountAssetModel(record)) if err != nil { return internalError(ctx, err, errFailedToEncodeResponse, v2.Log) } @@ -491,7 +491,7 @@ func (v2 *Handlers) AccountApplicationInformation(ctx echo.Context, address stri // return msgpack response if handle == protocol.CodecHandle { - data, err := encode(handle, model.AccountResourceToAccountResourceModel(record)) + data, err := encode(handle, model.AccountResourceToAccountApplicationModel(record)) if err != nil { return internalError(ctx, err, errFailedToEncodeResponse, v2.Log) } diff --git a/daemon/algod/api/spec/v2/model.go b/daemon/algod/api/spec/v2/model.go index 51042098c..9b964accc 100644 --- a/daemon/algod/api/spec/v2/model.go +++ b/daemon/algod/api/spec/v2/model.go @@ -22,30 +22,34 @@ import ( "github.com/algorand/go-algorand/ledger/ledgercore" ) -// AccountResourceModel used to encode AccountResource -type AccountResourceModel struct { +// AccountAssetModel is returned by AccountAssetInformation when msgpack format is specified +type AccountAssetModel struct { _struct struct{} `codec:",omitempty,omitemptyarray"` - AssetParams basics.AssetParams `codec:"asset-params"` - AssetHolding basics.AssetHolding `codec:"asset-holding"` - AppLocalState basics.AppLocalState `codec:"app-local-state"` - AppParams basics.AppParams `codec:"app-params"` + AssetParams *basics.AssetParams `codec:"asset-params"` + AssetHolding *basics.AssetHolding `codec:"asset-holding"` } -// AccountResourceToAccountResourceModel converts AccountResource to AccountResourceModel -func AccountResourceToAccountResourceModel(resource ledgercore.AccountResource) AccountResourceModel { - resourceModel := AccountResourceModel{} - if resource.AssetParams != nil { - resourceModel.AssetParams = *resource.AssetParams - } - if resource.AssetHolding != nil { - resourceModel.AssetHolding = *resource.AssetHolding - } - if resource.AppParams != nil { - resourceModel.AppParams = *resource.AppParams +// AccountApplicationModel is returned by AccountApplicationInformation when msgpack format is specified +type AccountApplicationModel struct { + _struct struct{} `codec:",omitempty,omitemptyarray"` + + AppLocalState *basics.AppLocalState `codec:"app-local-state"` + AppParams *basics.AppParams `codec:"app-params"` +} + +// AccountResourceToAccountAssetModel converts AccountResource to AccountAssetModel +func AccountResourceToAccountAssetModel(resource ledgercore.AccountResource) AccountAssetModel { + return AccountAssetModel{ + AssetParams: resource.AssetParams, + AssetHolding: resource.AssetHolding, } - if resource.AppLocalState != nil { - resourceModel.AppLocalState = *resource.AppLocalState +} + +// AccountResourceToAccountApplicationModel converts AccountResource to AccountApplicationModel +func AccountResourceToAccountApplicationModel(resource ledgercore.AccountResource) AccountApplicationModel { + return AccountApplicationModel{ + AppParams: resource.AppParams, + AppLocalState: resource.AppLocalState, } - return resourceModel } diff --git a/daemon/algod/api/spec/v2/msgp_gen.go b/daemon/algod/api/spec/v2/msgp_gen.go index bd5488a3f..48590fd11 100644 --- a/daemon/algod/api/spec/v2/msgp_gen.go +++ b/daemon/algod/api/spec/v2/msgp_gen.go @@ -3,75 +3,74 @@ package v2 // Code generated by github.com/algorand/msgp DO NOT EDIT. import ( + "github.com/algorand/go-algorand/data/basics" "github.com/algorand/msgp/msgp" ) // The following msgp objects are implemented in this file: -// AccountResourceModel -// |-----> (*) MarshalMsg -// |-----> (*) CanMarshalMsg -// |-----> (*) UnmarshalMsg -// |-----> (*) CanUnmarshalMsg -// |-----> (*) Msgsize -// |-----> (*) MsgIsZero +// AccountApplicationModel +// |-----> (*) MarshalMsg +// |-----> (*) CanMarshalMsg +// |-----> (*) UnmarshalMsg +// |-----> (*) CanUnmarshalMsg +// |-----> (*) Msgsize +// |-----> (*) MsgIsZero +// +// AccountAssetModel +// |-----> (*) MarshalMsg +// |-----> (*) CanMarshalMsg +// |-----> (*) UnmarshalMsg +// |-----> (*) CanUnmarshalMsg +// |-----> (*) Msgsize +// |-----> (*) MsgIsZero // // MarshalMsg implements msgp.Marshaler -func (z *AccountResourceModel) MarshalMsg(b []byte) (o []byte) { +func (z *AccountApplicationModel) MarshalMsg(b []byte) (o []byte) { o = msgp.Require(b, z.Msgsize()) // omitempty: check for empty values - zb0001Len := uint32(4) - var zb0001Mask uint8 /* 5 bits */ - if (*z).AppLocalState.MsgIsZero() { + zb0001Len := uint32(2) + var zb0001Mask uint8 /* 3 bits */ + if (*z).AppLocalState == nil { zb0001Len-- zb0001Mask |= 0x2 } - if (*z).AppParams.MsgIsZero() { + if (*z).AppParams == nil { zb0001Len-- zb0001Mask |= 0x4 } - if (*z).AssetHolding.MsgIsZero() { - zb0001Len-- - zb0001Mask |= 0x8 - } - if (*z).AssetParams.MsgIsZero() { - zb0001Len-- - zb0001Mask |= 0x10 - } // variable map header, size zb0001Len o = append(o, 0x80|uint8(zb0001Len)) if zb0001Len != 0 { if (zb0001Mask & 0x2) == 0 { // if not empty // string "app-local-state" o = append(o, 0xaf, 0x61, 0x70, 0x70, 0x2d, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x2d, 0x73, 0x74, 0x61, 0x74, 0x65) - o = (*z).AppLocalState.MarshalMsg(o) + if (*z).AppLocalState == nil { + o = msgp.AppendNil(o) + } else { + o = (*z).AppLocalState.MarshalMsg(o) + } } if (zb0001Mask & 0x4) == 0 { // if not empty // string "app-params" o = append(o, 0xaa, 0x61, 0x70, 0x70, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73) - o = (*z).AppParams.MarshalMsg(o) - } - if (zb0001Mask & 0x8) == 0 { // if not empty - // string "asset-holding" - o = append(o, 0xad, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2d, 0x68, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67) - o = (*z).AssetHolding.MarshalMsg(o) - } - if (zb0001Mask & 0x10) == 0 { // if not empty - // string "asset-params" - o = append(o, 0xac, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73) - o = (*z).AssetParams.MarshalMsg(o) + if (*z).AppParams == nil { + o = msgp.AppendNil(o) + } else { + o = (*z).AppParams.MarshalMsg(o) + } } } return } -func (_ *AccountResourceModel) CanMarshalMsg(z interface{}) bool { - _, ok := (z).(*AccountResourceModel) +func (_ *AccountApplicationModel) CanMarshalMsg(z interface{}) bool { + _, ok := (z).(*AccountApplicationModel) return ok } // UnmarshalMsg implements msgp.Unmarshaler -func (z *AccountResourceModel) UnmarshalMsg(bts []byte) (o []byte, err error) { +func (z *AccountApplicationModel) UnmarshalMsg(bts []byte) (o []byte, err error) { var field []byte _ = field var zb0001 int @@ -85,34 +84,232 @@ func (z *AccountResourceModel) UnmarshalMsg(bts []byte) (o []byte, err error) { } if zb0001 > 0 { zb0001-- - bts, err = (*z).AssetParams.UnmarshalMsg(bts) - if err != nil { - err = msgp.WrapError(err, "struct-from-array", "AssetParams") - return + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + (*z).AppLocalState = nil + } else { + if (*z).AppLocalState == nil { + (*z).AppLocalState = new(basics.AppLocalState) + } + bts, err = (*z).AppLocalState.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "struct-from-array", "AppLocalState") + return + } } } if zb0001 > 0 { zb0001-- - bts, err = (*z).AssetHolding.UnmarshalMsg(bts) + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + (*z).AppParams = nil + } else { + if (*z).AppParams == nil { + (*z).AppParams = new(basics.AppParams) + } + bts, err = (*z).AppParams.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "struct-from-array", "AppParams") + return + } + } + } + if zb0001 > 0 { + err = msgp.ErrTooManyArrayFields(zb0001) if err != nil { - err = msgp.WrapError(err, "struct-from-array", "AssetHolding") + err = msgp.WrapError(err, "struct-from-array") return } } - if zb0001 > 0 { + } else { + if err != nil { + err = msgp.WrapError(err) + return + } + if zb0002 { + (*z) = AccountApplicationModel{} + } + for zb0001 > 0 { zb0001-- - bts, err = (*z).AppLocalState.UnmarshalMsg(bts) + field, bts, err = msgp.ReadMapKeyZC(bts) if err != nil { - err = msgp.WrapError(err, "struct-from-array", "AppLocalState") + err = msgp.WrapError(err) return } + switch string(field) { + case "app-local-state": + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + (*z).AppLocalState = nil + } else { + if (*z).AppLocalState == nil { + (*z).AppLocalState = new(basics.AppLocalState) + } + bts, err = (*z).AppLocalState.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "AppLocalState") + return + } + } + case "app-params": + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + (*z).AppParams = nil + } else { + if (*z).AppParams == nil { + (*z).AppParams = new(basics.AppParams) + } + bts, err = (*z).AppParams.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "AppParams") + return + } + } + default: + err = msgp.ErrNoField(string(field)) + if err != nil { + err = msgp.WrapError(err) + return + } + } + } + } + o = bts + return +} + +func (_ *AccountApplicationModel) CanUnmarshalMsg(z interface{}) bool { + _, ok := (z).(*AccountApplicationModel) + return ok +} + +// Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message +func (z *AccountApplicationModel) Msgsize() (s int) { + s = 1 + 16 + if (*z).AppLocalState == nil { + s += msgp.NilSize + } else { + s += (*z).AppLocalState.Msgsize() + } + s += 11 + if (*z).AppParams == nil { + s += msgp.NilSize + } else { + s += (*z).AppParams.Msgsize() + } + return +} + +// MsgIsZero returns whether this is a zero value +func (z *AccountApplicationModel) MsgIsZero() bool { + return ((*z).AppLocalState == nil) && ((*z).AppParams == nil) +} + +// MarshalMsg implements msgp.Marshaler +func (z *AccountAssetModel) MarshalMsg(b []byte) (o []byte) { + o = msgp.Require(b, z.Msgsize()) + // omitempty: check for empty values + zb0001Len := uint32(2) + var zb0001Mask uint8 /* 3 bits */ + if (*z).AssetHolding == nil { + zb0001Len-- + zb0001Mask |= 0x2 + } + if (*z).AssetParams == nil { + zb0001Len-- + zb0001Mask |= 0x4 + } + // variable map header, size zb0001Len + o = append(o, 0x80|uint8(zb0001Len)) + if zb0001Len != 0 { + if (zb0001Mask & 0x2) == 0 { // if not empty + // string "asset-holding" + o = append(o, 0xad, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2d, 0x68, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67) + if (*z).AssetHolding == nil { + o = msgp.AppendNil(o) + } else { + o = (*z).AssetHolding.MarshalMsg(o) + } + } + if (zb0001Mask & 0x4) == 0 { // if not empty + // string "asset-params" + o = append(o, 0xac, 0x61, 0x73, 0x73, 0x65, 0x74, 0x2d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73) + if (*z).AssetParams == nil { + o = msgp.AppendNil(o) + } else { + o = (*z).AssetParams.MarshalMsg(o) + } + } + } + return +} + +func (_ *AccountAssetModel) CanMarshalMsg(z interface{}) bool { + _, ok := (z).(*AccountAssetModel) + return ok +} + +// UnmarshalMsg implements msgp.Unmarshaler +func (z *AccountAssetModel) UnmarshalMsg(bts []byte) (o []byte, err error) { + var field []byte + _ = field + var zb0001 int + var zb0002 bool + zb0001, zb0002, bts, err = msgp.ReadMapHeaderBytes(bts) + if _, ok := err.(msgp.TypeError); ok { + zb0001, zb0002, bts, err = msgp.ReadArrayHeaderBytes(bts) + if err != nil { + err = msgp.WrapError(err) + return } if zb0001 > 0 { zb0001-- - bts, err = (*z).AppParams.UnmarshalMsg(bts) - if err != nil { - err = msgp.WrapError(err, "struct-from-array", "AppParams") - return + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + (*z).AssetParams = nil + } else { + if (*z).AssetParams == nil { + (*z).AssetParams = new(basics.AssetParams) + } + bts, err = (*z).AssetParams.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "struct-from-array", "AssetParams") + return + } + } + } + if zb0001 > 0 { + zb0001-- + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + (*z).AssetHolding = nil + } else { + if (*z).AssetHolding == nil { + (*z).AssetHolding = new(basics.AssetHolding) + } + bts, err = (*z).AssetHolding.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "struct-from-array", "AssetHolding") + return + } } } if zb0001 > 0 { @@ -128,7 +325,7 @@ func (z *AccountResourceModel) UnmarshalMsg(bts []byte) (o []byte, err error) { return } if zb0002 { - (*z) = AccountResourceModel{} + (*z) = AccountAssetModel{} } for zb0001 > 0 { zb0001-- @@ -139,28 +336,38 @@ func (z *AccountResourceModel) UnmarshalMsg(bts []byte) (o []byte, err error) { } switch string(field) { case "asset-params": - bts, err = (*z).AssetParams.UnmarshalMsg(bts) - if err != nil { - err = msgp.WrapError(err, "AssetParams") - return + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + (*z).AssetParams = nil + } else { + if (*z).AssetParams == nil { + (*z).AssetParams = new(basics.AssetParams) + } + bts, err = (*z).AssetParams.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "AssetParams") + return + } } case "asset-holding": - bts, err = (*z).AssetHolding.UnmarshalMsg(bts) - if err != nil { - err = msgp.WrapError(err, "AssetHolding") - return - } - case "app-local-state": - bts, err = (*z).AppLocalState.UnmarshalMsg(bts) - if err != nil { - err = msgp.WrapError(err, "AppLocalState") - return - } - case "app-params": - bts, err = (*z).AppParams.UnmarshalMsg(bts) - if err != nil { - err = msgp.WrapError(err, "AppParams") - return + if msgp.IsNil(bts) { + bts, err = msgp.ReadNilBytes(bts) + if err != nil { + return + } + (*z).AssetHolding = nil + } else { + if (*z).AssetHolding == nil { + (*z).AssetHolding = new(basics.AssetHolding) + } + bts, err = (*z).AssetHolding.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "AssetHolding") + return + } } default: err = msgp.ErrNoField(string(field)) @@ -175,18 +382,29 @@ func (z *AccountResourceModel) UnmarshalMsg(bts []byte) (o []byte, err error) { return } -func (_ *AccountResourceModel) CanUnmarshalMsg(z interface{}) bool { - _, ok := (z).(*AccountResourceModel) +func (_ *AccountAssetModel) CanUnmarshalMsg(z interface{}) bool { + _, ok := (z).(*AccountAssetModel) return ok } // Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message -func (z *AccountResourceModel) Msgsize() (s int) { - s = 1 + 13 + (*z).AssetParams.Msgsize() + 14 + (*z).AssetHolding.Msgsize() + 16 + (*z).AppLocalState.Msgsize() + 11 + (*z).AppParams.Msgsize() +func (z *AccountAssetModel) Msgsize() (s int) { + s = 1 + 13 + if (*z).AssetParams == nil { + s += msgp.NilSize + } else { + s += (*z).AssetParams.Msgsize() + } + s += 14 + if (*z).AssetHolding == nil { + s += msgp.NilSize + } else { + s += (*z).AssetHolding.Msgsize() + } return } // MsgIsZero returns whether this is a zero value -func (z *AccountResourceModel) MsgIsZero() bool { - return ((*z).AssetParams.MsgIsZero()) && ((*z).AssetHolding.MsgIsZero()) && ((*z).AppLocalState.MsgIsZero()) && ((*z).AppParams.MsgIsZero()) +func (z *AccountAssetModel) MsgIsZero() bool { + return ((*z).AssetParams == nil) && ((*z).AssetHolding == nil) } diff --git a/daemon/algod/api/spec/v2/msgp_gen_test.go b/daemon/algod/api/spec/v2/msgp_gen_test.go index e11e36d13..57bda723c 100644 --- a/daemon/algod/api/spec/v2/msgp_gen_test.go +++ b/daemon/algod/api/spec/v2/msgp_gen_test.go @@ -12,9 +12,9 @@ import ( "github.com/algorand/msgp/msgp" ) -func TestMarshalUnmarshalAccountResourceModel(t *testing.T) { +func TestMarshalUnmarshalAccountApplicationModel(t *testing.T) { partitiontest.PartitionTest(t) - v := AccountResourceModel{} + v := AccountApplicationModel{} bts := v.MarshalMsg(nil) left, err := v.UnmarshalMsg(bts) if err != nil { @@ -33,12 +33,12 @@ func TestMarshalUnmarshalAccountResourceModel(t *testing.T) { } } -func TestRandomizedEncodingAccountResourceModel(t *testing.T) { - protocol.RunEncodingTest(t, &AccountResourceModel{}) +func TestRandomizedEncodingAccountApplicationModel(t *testing.T) { + protocol.RunEncodingTest(t, &AccountApplicationModel{}) } -func BenchmarkMarshalMsgAccountResourceModel(b *testing.B) { - v := AccountResourceModel{} +func BenchmarkMarshalMsgAccountApplicationModel(b *testing.B) { + v := AccountApplicationModel{} b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { @@ -46,8 +46,8 @@ func BenchmarkMarshalMsgAccountResourceModel(b *testing.B) { } } -func BenchmarkAppendMsgAccountResourceModel(b *testing.B) { - v := AccountResourceModel{} +func BenchmarkAppendMsgAccountApplicationModel(b *testing.B) { + v := AccountApplicationModel{} bts := make([]byte, 0, v.Msgsize()) bts = v.MarshalMsg(bts[0:0]) b.SetBytes(int64(len(bts))) @@ -58,8 +58,68 @@ func BenchmarkAppendMsgAccountResourceModel(b *testing.B) { } } -func BenchmarkUnmarshalAccountResourceModel(b *testing.B) { - v := AccountResourceModel{} +func BenchmarkUnmarshalAccountApplicationModel(b *testing.B) { + v := AccountApplicationModel{} + bts := v.MarshalMsg(nil) + b.ReportAllocs() + b.SetBytes(int64(len(bts))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := v.UnmarshalMsg(bts) + if err != nil { + b.Fatal(err) + } + } +} + +func TestMarshalUnmarshalAccountAssetModel(t *testing.T) { + partitiontest.PartitionTest(t) + v := AccountAssetModel{} + bts := v.MarshalMsg(nil) + left, err := v.UnmarshalMsg(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after UnmarshalMsg(): %q", len(left), left) + } + + left, err = msgp.Skip(bts) + if err != nil { + t.Fatal(err) + } + if len(left) > 0 { + t.Errorf("%d bytes left over after Skip(): %q", len(left), left) + } +} + +func TestRandomizedEncodingAccountAssetModel(t *testing.T) { + protocol.RunEncodingTest(t, &AccountAssetModel{}) +} + +func BenchmarkMarshalMsgAccountAssetModel(b *testing.B) { + v := AccountAssetModel{} + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + v.MarshalMsg(nil) + } +} + +func BenchmarkAppendMsgAccountAssetModel(b *testing.B) { + v := AccountAssetModel{} + bts := make([]byte, 0, v.Msgsize()) + bts = v.MarshalMsg(bts[0:0]) + b.SetBytes(int64(len(bts))) + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + bts = v.MarshalMsg(bts[0:0]) + } +} + +func BenchmarkUnmarshalAccountAssetModel(b *testing.B) { + v := AccountAssetModel{} bts := v.MarshalMsg(nil) b.ReportAllocs() b.SetBytes(int64(len(bts))) diff --git a/ledger/msgp_gen.go b/ledger/msgp_gen.go index 0ec2773f0..5e0a02567 100644 --- a/ledger/msgp_gen.go +++ b/ledger/msgp_gen.go @@ -729,14 +729,6 @@ func (z *baseAccountData) UnmarshalMsg(bts []byte) (o []byte, err error) { } if zb0001 > 0 { zb0001-- - bts, err = (*z).baseOnlineAccountData.StateProofID.UnmarshalMsg(bts) - if err != nil { - err = msgp.WrapError(err, "struct-from-array", "StateProofID") - return - } - } - if zb0001 > 0 { - zb0001-- bts, err = (*z).baseOnlineAccountData.VoteFirstValid.UnmarshalMsg(bts) if err != nil { err = msgp.WrapError(err, "struct-from-array", "VoteFirstValid") @@ -761,6 +753,14 @@ func (z *baseAccountData) UnmarshalMsg(bts []byte) (o []byte, err error) { } if zb0001 > 0 { zb0001-- + bts, err = (*z).baseOnlineAccountData.StateProofID.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "struct-from-array", "StateProofID") + return + } + } + if zb0001 > 0 { + zb0001-- (*z).UpdateRound, bts, err = msgp.ReadUint64Bytes(bts) if err != nil { err = msgp.WrapError(err, "struct-from-array", "UpdateRound") @@ -874,12 +874,6 @@ func (z *baseAccountData) UnmarshalMsg(bts []byte) (o []byte, err error) { err = msgp.WrapError(err, "SelectionID") return } - case "F": - bts, err = (*z).baseOnlineAccountData.StateProofID.UnmarshalMsg(bts) - if err != nil { - err = msgp.WrapError(err, "StateProofID") - return - } case "C": bts, err = (*z).baseOnlineAccountData.VoteFirstValid.UnmarshalMsg(bts) if err != nil { @@ -898,6 +892,12 @@ func (z *baseAccountData) UnmarshalMsg(bts []byte) (o []byte, err error) { err = msgp.WrapError(err, "VoteKeyDilution") return } + case "F": + bts, err = (*z).baseOnlineAccountData.StateProofID.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "StateProofID") + return + } case "z": (*z).UpdateRound, bts, err = msgp.ReadUint64Bytes(bts) if err != nil { @@ -924,13 +924,13 @@ func (_ *baseAccountData) CanUnmarshalMsg(z interface{}) bool { // Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message func (z *baseAccountData) Msgsize() (s int) { - s = 3 + 2 + (*z).Status.Msgsize() + 2 + (*z).MicroAlgos.Msgsize() + 2 + msgp.Uint64Size + 2 + (*z).RewardedMicroAlgos.Msgsize() + 2 + (*z).AuthAddr.Msgsize() + 2 + msgp.Uint64Size + 2 + msgp.Uint64Size + 2 + msgp.Uint32Size + 2 + msgp.Uint64Size + 2 + msgp.Uint64Size + 2 + msgp.Uint64Size + 2 + msgp.Uint64Size + 2 + (*z).baseOnlineAccountData.VoteID.Msgsize() + 2 + (*z).baseOnlineAccountData.SelectionID.Msgsize() + 2 + (*z).baseOnlineAccountData.StateProofID.Msgsize() + 2 + (*z).baseOnlineAccountData.VoteFirstValid.Msgsize() + 2 + (*z).baseOnlineAccountData.VoteLastValid.Msgsize() + 2 + msgp.Uint64Size + 2 + msgp.Uint64Size + s = 3 + 2 + (*z).Status.Msgsize() + 2 + (*z).MicroAlgos.Msgsize() + 2 + msgp.Uint64Size + 2 + (*z).RewardedMicroAlgos.Msgsize() + 2 + (*z).AuthAddr.Msgsize() + 2 + msgp.Uint64Size + 2 + msgp.Uint64Size + 2 + msgp.Uint32Size + 2 + msgp.Uint64Size + 2 + msgp.Uint64Size + 2 + msgp.Uint64Size + 2 + msgp.Uint64Size + 2 + (*z).baseOnlineAccountData.VoteID.Msgsize() + 2 + (*z).baseOnlineAccountData.SelectionID.Msgsize() + 2 + (*z).baseOnlineAccountData.VoteFirstValid.Msgsize() + 2 + (*z).baseOnlineAccountData.VoteLastValid.Msgsize() + 2 + msgp.Uint64Size + 2 + (*z).baseOnlineAccountData.StateProofID.Msgsize() + 2 + msgp.Uint64Size return } // MsgIsZero returns whether this is a zero value func (z *baseAccountData) MsgIsZero() bool { - return ((*z).Status.MsgIsZero()) && ((*z).MicroAlgos.MsgIsZero()) && ((*z).RewardsBase == 0) && ((*z).RewardedMicroAlgos.MsgIsZero()) && ((*z).AuthAddr.MsgIsZero()) && ((*z).TotalAppSchemaNumUint == 0) && ((*z).TotalAppSchemaNumByteSlice == 0) && ((*z).TotalExtraAppPages == 0) && ((*z).TotalAssetParams == 0) && ((*z).TotalAssets == 0) && ((*z).TotalAppParams == 0) && ((*z).TotalAppLocalStates == 0) && ((*z).baseOnlineAccountData.VoteID.MsgIsZero()) && ((*z).baseOnlineAccountData.SelectionID.MsgIsZero()) && ((*z).baseOnlineAccountData.StateProofID.MsgIsZero()) && ((*z).baseOnlineAccountData.VoteFirstValid.MsgIsZero()) && ((*z).baseOnlineAccountData.VoteLastValid.MsgIsZero()) && ((*z).baseOnlineAccountData.VoteKeyDilution == 0) && ((*z).UpdateRound == 0) + return ((*z).Status.MsgIsZero()) && ((*z).MicroAlgos.MsgIsZero()) && ((*z).RewardsBase == 0) && ((*z).RewardedMicroAlgos.MsgIsZero()) && ((*z).AuthAddr.MsgIsZero()) && ((*z).TotalAppSchemaNumUint == 0) && ((*z).TotalAppSchemaNumByteSlice == 0) && ((*z).TotalExtraAppPages == 0) && ((*z).TotalAssetParams == 0) && ((*z).TotalAssets == 0) && ((*z).TotalAppParams == 0) && ((*z).TotalAppLocalStates == 0) && ((*z).baseOnlineAccountData.VoteID.MsgIsZero()) && ((*z).baseOnlineAccountData.SelectionID.MsgIsZero()) && ((*z).baseOnlineAccountData.VoteFirstValid.MsgIsZero()) && ((*z).baseOnlineAccountData.VoteLastValid.MsgIsZero()) && ((*z).baseOnlineAccountData.VoteKeyDilution == 0) && ((*z).baseOnlineAccountData.StateProofID.MsgIsZero()) && ((*z).UpdateRound == 0) } // MarshalMsg implements msgp.Marshaler @@ -1036,14 +1036,6 @@ func (z *baseOnlineAccountData) UnmarshalMsg(bts []byte) (o []byte, err error) { } if zb0001 > 0 { zb0001-- - bts, err = (*z).StateProofID.UnmarshalMsg(bts) - if err != nil { - err = msgp.WrapError(err, "struct-from-array", "StateProofID") - return - } - } - if zb0001 > 0 { - zb0001-- bts, err = (*z).VoteFirstValid.UnmarshalMsg(bts) if err != nil { err = msgp.WrapError(err, "struct-from-array", "VoteFirstValid") @@ -1067,6 +1059,14 @@ func (z *baseOnlineAccountData) UnmarshalMsg(bts []byte) (o []byte, err error) { } } if zb0001 > 0 { + zb0001-- + bts, err = (*z).StateProofID.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "struct-from-array", "StateProofID") + return + } + } + if zb0001 > 0 { err = msgp.ErrTooManyArrayFields(zb0001) if err != nil { err = msgp.WrapError(err, "struct-from-array") @@ -1101,12 +1101,6 @@ func (z *baseOnlineAccountData) UnmarshalMsg(bts []byte) (o []byte, err error) { err = msgp.WrapError(err, "SelectionID") return } - case "F": - bts, err = (*z).StateProofID.UnmarshalMsg(bts) - if err != nil { - err = msgp.WrapError(err, "StateProofID") - return - } case "C": bts, err = (*z).VoteFirstValid.UnmarshalMsg(bts) if err != nil { @@ -1125,6 +1119,12 @@ func (z *baseOnlineAccountData) UnmarshalMsg(bts []byte) (o []byte, err error) { err = msgp.WrapError(err, "VoteKeyDilution") return } + case "F": + bts, err = (*z).StateProofID.UnmarshalMsg(bts) + if err != nil { + err = msgp.WrapError(err, "StateProofID") + return + } default: err = msgp.ErrNoField(string(field)) if err != nil { @@ -1145,13 +1145,13 @@ func (_ *baseOnlineAccountData) CanUnmarshalMsg(z interface{}) bool { // Msgsize returns an upper bound estimate of the number of bytes occupied by the serialized message func (z *baseOnlineAccountData) Msgsize() (s int) { - s = 1 + 2 + (*z).VoteID.Msgsize() + 2 + (*z).SelectionID.Msgsize() + 2 + (*z).StateProofID.Msgsize() + 2 + (*z).VoteFirstValid.Msgsize() + 2 + (*z).VoteLastValid.Msgsize() + 2 + msgp.Uint64Size + s = 1 + 2 + (*z).VoteID.Msgsize() + 2 + (*z).SelectionID.Msgsize() + 2 + (*z).VoteFirstValid.Msgsize() + 2 + (*z).VoteLastValid.Msgsize() + 2 + msgp.Uint64Size + 2 + (*z).StateProofID.Msgsize() return } // MsgIsZero returns whether this is a zero value func (z *baseOnlineAccountData) MsgIsZero() bool { - return ((*z).VoteID.MsgIsZero()) && ((*z).SelectionID.MsgIsZero()) && ((*z).StateProofID.MsgIsZero()) && ((*z).VoteFirstValid.MsgIsZero()) && ((*z).VoteLastValid.MsgIsZero()) && ((*z).VoteKeyDilution == 0) + return ((*z).VoteID.MsgIsZero()) && ((*z).SelectionID.MsgIsZero()) && ((*z).VoteFirstValid.MsgIsZero()) && ((*z).VoteLastValid.MsgIsZero()) && ((*z).VoteKeyDilution == 0) && ((*z).StateProofID.MsgIsZero()) } // MarshalMsg implements msgp.Marshaler diff --git a/libgoal/libgoal.go b/libgoal/libgoal.go index 9c4fc4d62..a0107ba77 100644 --- a/libgoal/libgoal.go +++ b/libgoal/libgoal.go @@ -675,7 +675,7 @@ func (c *Client) AccountApplicationInformation(accountAddress string, applicatio } // RawAccountApplicationInformation gets account information about a given app. -func (c *Client) RawAccountApplicationInformation(accountAddress string, applicationID uint64) (accountResource modelV2.AccountResourceModel, err error) { +func (c *Client) RawAccountApplicationInformation(accountAddress string, applicationID uint64) (accountResource modelV2.AccountApplicationModel, err error) { algod, err := c.ensureAlgodClient() if err == nil { var resp []byte @@ -697,7 +697,7 @@ func (c *Client) AccountAssetInformation(accountAddress string, assetID uint64) } // RawAccountAssetInformation gets account information about a given app. -func (c *Client) RawAccountAssetInformation(accountAddress string, assetID uint64) (accountResource modelV2.AccountResourceModel, err error) { +func (c *Client) RawAccountAssetInformation(accountAddress string, assetID uint64) (accountResource modelV2.AccountAssetModel, err error) { algod, err := c.ensureAlgodClient() if err == nil { var resp []byte |