From 7b6df71a30f58abd22fadae528324c9f1622cd10 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Wed, 6 Aug 2025 07:24:19 -0700 Subject: [PATCH 01/27] Progress on multi-chain cleanup --- clients/apiclient/api_chains.go | 423 ++++++++------- clients/apiclient/api_corecontracts.go | 509 +++++++++--------- .../apiclient/model_chain_info_response.go | 18 +- .../model_committee_info_response.go | 14 +- .../model_gov_chain_info_response.go | 20 +- .../model_request_processed_response.go | 18 +- clients/chainclient/chainclient.go | 2 +- clients/multiclient/activate.go | 3 +- clients/multiclient/reqstatus.go | 16 +- components/chains/component.go | 4 +- components/webapi/component.go | 4 +- packages/apilib/deploychain.go | 6 +- packages/chain/chain.go | 8 +- packages/chain/chain_listener.go | 11 +- packages/chain/chainmanager/chain_manager.go | 4 +- .../chainmanager/var_access_nodes_state.go | 2 +- packages/chain/cmtlog/cmt_log.go | 10 +- packages/chain/cmtlog/cmt_log_test.go | 2 +- packages/chain/cons/bp/bp_test.go | 8 +- packages/chain/cons/cons.go | 2 +- packages/chain/cons/cons_test.go | 6 +- packages/chain/cons/gr/gr.go | 2 +- packages/chain/mempool/mempool.go | 4 +- packages/chain/node.go | 19 +- packages/chain/node_test.go | 8 +- .../statemanager/gpa/state_manager_gpa.go | 2 +- packages/chain/statemanager/gpa/test_env.go | 2 +- .../chain/statemanager/gpa/utils/block_wal.go | 3 +- .../statemanager/gpa/utils/block_wal_test.go | 17 +- .../snapshots/snapshot_manager.go | 2 +- .../snapshots/snapshot_manager_test.go | 18 +- packages/chain/statemanager/state_manager.go | 4 +- .../chains/accessmanager/access_manager.go | 25 +- .../accessmanager/access_manager_test.go | 9 +- .../accessmanager/dist/access_manager_dist.go | 195 +++---- .../dist/access_manager_dist_test.go | 7 +- .../dist/access_manager_rapid_test.go | 96 ++-- .../accessmanager/dist/input_access_nodes.go | 6 +- .../dist/input_chain_disabled.go | 6 +- .../chains/accessmanager/dist/msg_access.go | 23 +- .../accessmanager/dist/msg_access_test.go | 10 +- packages/chains/chains.go | 189 +++---- packages/chains/chains_listener.go | 19 +- packages/chainutil/callview.go | 4 +- packages/chainutil/evmestimategas.go | 2 +- packages/database/manager.go | 8 +- .../evm/jsonrpc/jsonrpctest/jsonrpc_test.go | 2 +- packages/isc/chainid.go | 2 +- packages/isc/chainid_test.go | 6 +- packages/nodeconn/chain.go | 2 +- packages/nodeconn/nodeconn.go | 20 +- packages/publisher/publisher.go | 6 +- packages/solo/chain.go | 2 +- .../chain_record_registry_provider.go | 2 +- packages/testutil/dummyrequest.go | 8 +- .../mocked_cnsensus_state_registry.go | 5 +- packages/transaction/change_gov_controller.go | 3 +- packages/vm/core/evm/emulator/emulator.go | 4 +- packages/vm/core/governance/internal.go | 2 +- packages/vm/core/testcore/root_test.go | 2 +- packages/vm/viewcontext/viewcontext.go | 2 +- packages/vm/vmimpl/vmrun_test.go | 2 +- .../webapi/controllers/chain/estimategas.go | 2 +- .../webapi/controllers/chain/management.go | 2 +- .../controllerutils/controllerutils.go | 4 +- packages/webapi/interfaces/interfaces.go | 20 +- packages/webapi/params/decoder.go | 2 +- packages/webapi/services/chain.go | 4 +- packages/webapi/services/committee.go | 3 +- packages/webapi/services/evm.go | 2 +- packages/webapi/services/metrics.go | 7 +- packages/webapi/services/node.go | 9 +- packages/webapi/services/offledger.go | 2 +- packages/webapi/services/registry.go | 3 +- .../webapi/websocket/subscriptionvalidator.go | 12 +- tools/cluster/cluster.go | 2 +- tools/cluster/tests/deploy_test.go | 2 +- tools/cluster/tests/missing_requests_test.go | 4 +- tools/cluster/tests/nodeconn_test.go | 2 +- tools/cluster/tests/util.go | 2 +- tools/cluster/tests/validator_fees_test.go | 4 +- tools/cluster/tests/wasp-cli_rotation_test.go | 2 +- tools/wasp-cli/chain/accounts.go | 4 +- tools/wasp-cli/chain/activate.go | 7 +- tools/wasp-cli/chain/deploy.go | 2 +- tools/wasp-cli/chain/postrequest.go | 2 +- tools/wasp-cli/cli/cliclients/clients.go | 3 +- tools/wasp-cli/cli/config/config.go | 4 +- 88 files changed, 907 insertions(+), 1045 deletions(-) diff --git a/clients/apiclient/api_chains.go b/clients/apiclient/api_chains.go index f2165c61db..41d7012d31 100644 --- a/clients/apiclient/api_chains.go +++ b/clients/apiclient/api_chains.go @@ -19,14 +19,13 @@ import ( "strings" ) - // ChainsAPIService ChainsAPI service type ChainsAPIService service type ApiActivateChainRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - chainID string + chainID string } func (r ApiActivateChainRequest) Execute() (*http.Response, error) { @@ -36,24 +35,24 @@ func (r ApiActivateChainRequest) Execute() (*http.Response, error) { /* ActivateChain Activate a chain - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param chainID ChainID (Hex Address) - @return ApiActivateChainRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param chainID ChainID (Hex Address) + @return ApiActivateChainRequest */ -func (a *ChainsAPIService) ActivateChain(ctx context.Context, chainID string) ApiActivateChainRequest { +func (a *ChainsAPIService) ActivateChain(ctx context.Context) ApiActivateChainRequest { return ApiActivateChainRequest{ ApiService: a, - ctx: ctx, - chainID: chainID, + ctx: ctx, + chainID: chainID, } } // Execute executes the request func (a *ChainsAPIService) ActivateChainExecute(r ApiActivateChainRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.ActivateChain") @@ -128,8 +127,8 @@ func (a *ChainsAPIService) ActivateChainExecute(r ApiActivateChainRequest) (*htt newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -138,9 +137,9 @@ func (a *ChainsAPIService) ActivateChainExecute(r ApiActivateChainRequest) (*htt } type ApiAddAccessNodeRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - peer string + peer string } func (r ApiAddAccessNodeRequest) Execute() (*http.Response, error) { @@ -150,24 +149,24 @@ func (r ApiAddAccessNodeRequest) Execute() (*http.Response, error) { /* AddAccessNode Configure a trusted node to be an access node. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param peer Name or PubKey (hex) of the trusted peer - @return ApiAddAccessNodeRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param peer Name or PubKey (hex) of the trusted peer + @return ApiAddAccessNodeRequest */ func (a *ChainsAPIService) AddAccessNode(ctx context.Context, peer string) ApiAddAccessNodeRequest { return ApiAddAccessNodeRequest{ ApiService: a, - ctx: ctx, - peer: peer, + ctx: ctx, + peer: peer, } } // Execute executes the request func (a *ChainsAPIService) AddAccessNodeExecute(r ApiAddAccessNodeRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPut - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPut + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.AddAccessNode") @@ -242,8 +241,8 @@ func (a *ChainsAPIService) AddAccessNodeExecute(r ApiAddAccessNodeRequest) (*htt newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -252,8 +251,8 @@ func (a *ChainsAPIService) AddAccessNodeExecute(r ApiAddAccessNodeRequest) (*htt } type ApiCallViewRequest struct { - ctx context.Context - ApiService *ChainsAPIService + ctx context.Context + ApiService *ChainsAPIService contractCallViewRequest *ContractCallViewRequest } @@ -272,24 +271,25 @@ CallView Call a view function on a contract by Hname Execute a view call. Either use HName or Name properties. If both are supplied, HName are used. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiCallViewRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiCallViewRequest */ func (a *ChainsAPIService) CallView(ctx context.Context) ApiCallViewRequest { return ApiCallViewRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return []string +// +// @return []string func (a *ChainsAPIService) CallViewExecute(r ApiCallViewRequest) ([]string, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue []string + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []string ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.CallView") @@ -363,7 +363,7 @@ func (a *ChainsAPIService) CallViewExecute(r ApiCallViewRequest) ([]string, *htt } type ApiDeactivateChainRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService } @@ -374,22 +374,22 @@ func (r ApiDeactivateChainRequest) Execute() (*http.Response, error) { /* DeactivateChain Deactivate a chain - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiDeactivateChainRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiDeactivateChainRequest */ func (a *ChainsAPIService) DeactivateChain(ctx context.Context) ApiDeactivateChainRequest { return ApiDeactivateChainRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request func (a *ChainsAPIService) DeactivateChainExecute(r ApiDeactivateChainRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.DeactivateChain") @@ -463,8 +463,8 @@ func (a *ChainsAPIService) DeactivateChainExecute(r ApiDeactivateChainRequest) ( newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -473,7 +473,7 @@ func (a *ChainsAPIService) DeactivateChainExecute(r ApiDeactivateChainRequest) ( } type ApiDumpAccountsRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService } @@ -484,22 +484,22 @@ func (r ApiDumpAccountsRequest) Execute() (*http.Response, error) { /* DumpAccounts dump accounts information into a humanly-readable format - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiDumpAccountsRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiDumpAccountsRequest */ func (a *ChainsAPIService) DumpAccounts(ctx context.Context) ApiDumpAccountsRequest { return ApiDumpAccountsRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request func (a *ChainsAPIService) DumpAccountsExecute(r ApiDumpAccountsRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.DumpAccounts") @@ -573,8 +573,8 @@ func (a *ChainsAPIService) DumpAccountsExecute(r ApiDumpAccountsRequest) (*http. newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -583,9 +583,9 @@ func (a *ChainsAPIService) DumpAccountsExecute(r ApiDumpAccountsRequest) (*http. } type ApiEstimateGasOffledgerRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - request *EstimateGasRequestOffledger + request *EstimateGasRequestOffledger } // Request @@ -601,24 +601,25 @@ func (r ApiEstimateGasOffledgerRequest) Execute() (*ReceiptResponse, *http.Respo /* EstimateGasOffledger Estimates gas for a given off-ledger ISC request - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiEstimateGasOffledgerRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiEstimateGasOffledgerRequest */ func (a *ChainsAPIService) EstimateGasOffledger(ctx context.Context) ApiEstimateGasOffledgerRequest { return ApiEstimateGasOffledgerRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return ReceiptResponse +// +// @return ReceiptResponse func (a *ChainsAPIService) EstimateGasOffledgerExecute(r ApiEstimateGasOffledgerRequest) (*ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ReceiptResponse + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.EstimateGasOffledger") @@ -692,9 +693,9 @@ func (a *ChainsAPIService) EstimateGasOffledgerExecute(r ApiEstimateGasOffledger } type ApiEstimateGasOnledgerRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - request *EstimateGasRequestOnledger + request *EstimateGasRequestOnledger } // Request @@ -710,24 +711,25 @@ func (r ApiEstimateGasOnledgerRequest) Execute() (*ReceiptResponse, *http.Respon /* EstimateGasOnledger Estimates gas for a given on-ledger ISC request - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiEstimateGasOnledgerRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiEstimateGasOnledgerRequest */ func (a *ChainsAPIService) EstimateGasOnledger(ctx context.Context) ApiEstimateGasOnledgerRequest { return ApiEstimateGasOnledgerRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return ReceiptResponse +// +// @return ReceiptResponse func (a *ChainsAPIService) EstimateGasOnledgerExecute(r ApiEstimateGasOnledgerRequest) (*ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ReceiptResponse + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.EstimateGasOnledger") @@ -801,9 +803,9 @@ func (a *ChainsAPIService) EstimateGasOnledgerExecute(r ApiEstimateGasOnledgerRe } type ApiGetChainInfoRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - block *string + block *string } // Block index or trie root @@ -819,24 +821,25 @@ func (r ApiGetChainInfoRequest) Execute() (*ChainInfoResponse, *http.Response, e /* GetChainInfo Get information about a specific chain - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGetChainInfoRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGetChainInfoRequest */ func (a *ChainsAPIService) GetChainInfo(ctx context.Context) ApiGetChainInfoRequest { return ApiGetChainInfoRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return ChainInfoResponse +// +// @return ChainInfoResponse func (a *ChainsAPIService) GetChainInfoExecute(r ApiGetChainInfoRequest) (*ChainInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ChainInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ChainInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetChainInfo") @@ -908,9 +911,9 @@ func (a *ChainsAPIService) GetChainInfoExecute(r ApiGetChainInfoRequest) (*Chain } type ApiGetCommitteeInfoRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - block *string + block *string } // Block index or trie root @@ -926,24 +929,25 @@ func (r ApiGetCommitteeInfoRequest) Execute() (*CommitteeInfoResponse, *http.Res /* GetCommitteeInfo Get information about the deployed committee - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGetCommitteeInfoRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGetCommitteeInfoRequest */ func (a *ChainsAPIService) GetCommitteeInfo(ctx context.Context) ApiGetCommitteeInfoRequest { return ApiGetCommitteeInfoRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return CommitteeInfoResponse +// +// @return CommitteeInfoResponse func (a *ChainsAPIService) GetCommitteeInfoExecute(r ApiGetCommitteeInfoRequest) (*CommitteeInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *CommitteeInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *CommitteeInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetCommitteeInfo") @@ -1020,8 +1024,8 @@ func (a *ChainsAPIService) GetCommitteeInfoExecute(r ApiGetCommitteeInfoRequest) newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1039,9 +1043,9 @@ func (a *ChainsAPIService) GetCommitteeInfoExecute(r ApiGetCommitteeInfoRequest) } type ApiGetContractsRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - block *string + block *string } // Block index or trie root @@ -1057,24 +1061,25 @@ func (r ApiGetContractsRequest) Execute() ([]ContractInfoResponse, *http.Respons /* GetContracts Get all available chain contracts - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGetContractsRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGetContractsRequest */ func (a *ChainsAPIService) GetContracts(ctx context.Context) ApiGetContractsRequest { return ApiGetContractsRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return []ContractInfoResponse +// +// @return []ContractInfoResponse func (a *ChainsAPIService) GetContractsExecute(r ApiGetContractsRequest) ([]ContractInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue []ContractInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []ContractInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetContracts") @@ -1151,8 +1156,8 @@ func (a *ChainsAPIService) GetContractsExecute(r ApiGetContractsRequest) ([]Cont newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1170,7 +1175,7 @@ func (a *ChainsAPIService) GetContractsExecute(r ApiGetContractsRequest) ([]Cont } type ApiGetMempoolContentsRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService } @@ -1181,24 +1186,25 @@ func (r ApiGetMempoolContentsRequest) Execute() ([]int32, *http.Response, error) /* GetMempoolContents Get the contents of the mempool. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGetMempoolContentsRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGetMempoolContentsRequest */ func (a *ChainsAPIService) GetMempoolContents(ctx context.Context) ApiGetMempoolContentsRequest { return ApiGetMempoolContentsRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return []int32 +// +// @return []int32 func (a *ChainsAPIService) GetMempoolContentsExecute(r ApiGetMempoolContentsRequest) ([]int32, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue []int32 + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []int32 ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetMempoolContents") @@ -1272,8 +1278,8 @@ func (a *ChainsAPIService) GetMempoolContentsExecute(r ApiGetMempoolContentsRequ newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1291,9 +1297,9 @@ func (a *ChainsAPIService) GetMempoolContentsExecute(r ApiGetMempoolContentsRequ } type ApiGetReceiptRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - requestID string + requestID string } func (r ApiGetReceiptRequest) Execute() (*ReceiptResponse, *http.Response, error) { @@ -1303,26 +1309,27 @@ func (r ApiGetReceiptRequest) Execute() (*ReceiptResponse, *http.Response, error /* GetReceipt Get a receipt from a request ID - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param requestID RequestID (Hex) - @return ApiGetReceiptRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param requestID RequestID (Hex) + @return ApiGetReceiptRequest */ func (a *ChainsAPIService) GetReceipt(ctx context.Context, requestID string) ApiGetReceiptRequest { return ApiGetReceiptRequest{ ApiService: a, - ctx: ctx, - requestID: requestID, + ctx: ctx, + requestID: requestID, } } // Execute executes the request -// @return ReceiptResponse +// +// @return ReceiptResponse func (a *ChainsAPIService) GetReceiptExecute(r ApiGetReceiptRequest) (*ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ReceiptResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetReceipt") @@ -1392,9 +1399,9 @@ func (a *ChainsAPIService) GetReceiptExecute(r ApiGetReceiptRequest) (*ReceiptRe } type ApiGetStateValueRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - stateKey string + stateKey string } func (r ApiGetStateValueRequest) Execute() (*StateResponse, *http.Response, error) { @@ -1404,26 +1411,27 @@ func (r ApiGetStateValueRequest) Execute() (*StateResponse, *http.Response, erro /* GetStateValue Fetch the raw value associated with the given key in the chain state - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param stateKey State Key (Hex) - @return ApiGetStateValueRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param stateKey State Key (Hex) + @return ApiGetStateValueRequest */ func (a *ChainsAPIService) GetStateValue(ctx context.Context, stateKey string) ApiGetStateValueRequest { return ApiGetStateValueRequest{ ApiService: a, - ctx: ctx, - stateKey: stateKey, + ctx: ctx, + stateKey: stateKey, } } // Execute executes the request -// @return StateResponse +// +// @return StateResponse func (a *ChainsAPIService) GetStateValueExecute(r ApiGetStateValueRequest) (*StateResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *StateResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *StateResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetStateValue") @@ -1493,9 +1501,9 @@ func (a *ChainsAPIService) GetStateValueExecute(r ApiGetStateValueRequest) (*Sta } type ApiRemoveAccessNodeRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - peer string + peer string } func (r ApiRemoveAccessNodeRequest) Execute() (*http.Response, error) { @@ -1505,24 +1513,24 @@ func (r ApiRemoveAccessNodeRequest) Execute() (*http.Response, error) { /* RemoveAccessNode Remove an access node. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param peer Name or PubKey (hex) of the trusted peer - @return ApiRemoveAccessNodeRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param peer Name or PubKey (hex) of the trusted peer + @return ApiRemoveAccessNodeRequest */ func (a *ChainsAPIService) RemoveAccessNode(ctx context.Context, peer string) ApiRemoveAccessNodeRequest { return ApiRemoveAccessNodeRequest{ ApiService: a, - ctx: ctx, - peer: peer, + ctx: ctx, + peer: peer, } } // Execute executes the request func (a *ChainsAPIService) RemoveAccessNodeExecute(r ApiRemoveAccessNodeRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodDelete - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodDelete + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.RemoveAccessNode") @@ -1597,8 +1605,8 @@ func (a *ChainsAPIService) RemoveAccessNodeExecute(r ApiRemoveAccessNodeRequest) newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -1607,8 +1615,8 @@ func (a *ChainsAPIService) RemoveAccessNodeExecute(r ApiRemoveAccessNodeRequest) } type ApiRotateChainRequest struct { - ctx context.Context - ApiService *ChainsAPIService + ctx context.Context + ApiService *ChainsAPIService rotateRequest *RotateChainRequest } @@ -1625,22 +1633,22 @@ func (r ApiRotateChainRequest) Execute() (*http.Response, error) { /* RotateChain Rotate a chain - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiRotateChainRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiRotateChainRequest */ func (a *ChainsAPIService) RotateChain(ctx context.Context) ApiRotateChainRequest { return ApiRotateChainRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request func (a *ChainsAPIService) RotateChainExecute(r ApiRotateChainRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.RotateChain") @@ -1716,8 +1724,8 @@ func (a *ChainsAPIService) RotateChainExecute(r ApiRotateChainRequest) (*http.Re newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -1726,9 +1734,9 @@ func (a *ChainsAPIService) RotateChainExecute(r ApiRotateChainRequest) (*http.Re } type ApiSetChainRecordRequest struct { - ctx context.Context - ApiService *ChainsAPIService - chainID string + ctx context.Context + ApiService *ChainsAPIService + chainID string chainRecord *ChainRecord } @@ -1745,24 +1753,24 @@ func (r ApiSetChainRecordRequest) Execute() (*http.Response, error) { /* SetChainRecord Sets the chain record. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param chainID ChainID (Hex Address) - @return ApiSetChainRecordRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param chainID ChainID (Hex Address) + @return ApiSetChainRecordRequest */ -func (a *ChainsAPIService) SetChainRecord(ctx context.Context, chainID string) ApiSetChainRecordRequest { +func (a *ChainsAPIService) SetChainRecord(ctx context.Context) ApiSetChainRecordRequest { return ApiSetChainRecordRequest{ ApiService: a, - ctx: ctx, - chainID: chainID, + ctx: ctx, + chainID: chainID, } } // Execute executes the request func (a *ChainsAPIService) SetChainRecordExecute(r ApiSetChainRecordRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.SetChainRecord") @@ -1842,8 +1850,8 @@ func (a *ChainsAPIService) SetChainRecordExecute(r ApiSetChainRecordRequest) (*h newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -1852,7 +1860,7 @@ func (a *ChainsAPIService) SetChainRecordExecute(r ApiSetChainRecordRequest) (*h } type ApiV1ChainEvmPostRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService } @@ -1863,22 +1871,22 @@ func (r ApiV1ChainEvmPostRequest) Execute() (*http.Response, error) { /* V1ChainEvmPost Ethereum JSON-RPC - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiV1ChainEvmPostRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiV1ChainEvmPostRequest */ func (a *ChainsAPIService) V1ChainEvmPost(ctx context.Context) ApiV1ChainEvmPostRequest { return ApiV1ChainEvmPostRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request func (a *ChainsAPIService) V1ChainEvmPostExecute(r ApiV1ChainEvmPostRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.V1ChainEvmPost") @@ -1938,7 +1946,7 @@ func (a *ChainsAPIService) V1ChainEvmPostExecute(r ApiV1ChainEvmPostRequest) (*h } type ApiV1ChainEvmWsGetRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService } @@ -1949,22 +1957,22 @@ func (r ApiV1ChainEvmWsGetRequest) Execute() (*http.Response, error) { /* V1ChainEvmWsGet Ethereum JSON-RPC (Websocket transport) - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiV1ChainEvmWsGetRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiV1ChainEvmWsGetRequest */ func (a *ChainsAPIService) V1ChainEvmWsGet(ctx context.Context) ApiV1ChainEvmWsGetRequest { return ApiV1ChainEvmWsGetRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request func (a *ChainsAPIService) V1ChainEvmWsGetExecute(r ApiV1ChainEvmWsGetRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.V1ChainEvmWsGet") @@ -2024,10 +2032,10 @@ func (a *ChainsAPIService) V1ChainEvmWsGetExecute(r ApiV1ChainEvmWsGetRequest) ( } type ApiWaitForRequestRequest struct { - ctx context.Context - ApiService *ChainsAPIService - requestID string - timeoutSeconds *int32 + ctx context.Context + ApiService *ChainsAPIService + requestID string + timeoutSeconds *int32 waitForL1Confirmation *bool } @@ -2050,26 +2058,27 @@ func (r ApiWaitForRequestRequest) Execute() (*ReceiptResponse, *http.Response, e /* WaitForRequest Wait until the given request has been processed by the node - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param requestID RequestID (Hex) - @return ApiWaitForRequestRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param requestID RequestID (Hex) + @return ApiWaitForRequestRequest */ func (a *ChainsAPIService) WaitForRequest(ctx context.Context, requestID string) ApiWaitForRequestRequest { return ApiWaitForRequestRequest{ ApiService: a, - ctx: ctx, - requestID: requestID, + ctx: ctx, + requestID: requestID, } } // Execute executes the request -// @return ReceiptResponse +// +// @return ReceiptResponse func (a *ChainsAPIService) WaitForRequestExecute(r ApiWaitForRequestRequest) (*ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ReceiptResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.WaitForRequest") diff --git a/clients/apiclient/api_corecontracts.go b/clients/apiclient/api_corecontracts.go index 67d7fae555..bac2343730 100644 --- a/clients/apiclient/api_corecontracts.go +++ b/clients/apiclient/api_corecontracts.go @@ -19,15 +19,14 @@ import ( "strings" ) - // CorecontractsAPIService CorecontractsAPI service type CorecontractsAPIService service type ApiAccountsGetAccountBalanceRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - agentID string - block *string + agentID string + block *string } // Block index or trie root @@ -43,26 +42,27 @@ func (r ApiAccountsGetAccountBalanceRequest) Execute() (*AssetsResponse, *http.R /* AccountsGetAccountBalance Get all assets belonging to an account - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param agentID AgentID (Hex Address for L1 accounts | Hex for EVM) - @return ApiAccountsGetAccountBalanceRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param agentID AgentID (Hex Address for L1 accounts | Hex for EVM) + @return ApiAccountsGetAccountBalanceRequest */ func (a *CorecontractsAPIService) AccountsGetAccountBalance(ctx context.Context, agentID string) ApiAccountsGetAccountBalanceRequest { return ApiAccountsGetAccountBalanceRequest{ ApiService: a, - ctx: ctx, - agentID: agentID, + ctx: ctx, + agentID: agentID, } } // Execute executes the request -// @return AssetsResponse +// +// @return AssetsResponse func (a *CorecontractsAPIService) AccountsGetAccountBalanceExecute(r ApiAccountsGetAccountBalanceRequest) (*AssetsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *AssetsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *AssetsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.AccountsGetAccountBalance") @@ -126,8 +126,8 @@ func (a *CorecontractsAPIService) AccountsGetAccountBalanceExecute(r ApiAccounts newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -145,10 +145,10 @@ func (a *CorecontractsAPIService) AccountsGetAccountBalanceExecute(r ApiAccounts } type ApiAccountsGetAccountNonceRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - agentID string - block *string + agentID string + block *string } // Block index or trie root @@ -164,26 +164,27 @@ func (r ApiAccountsGetAccountNonceRequest) Execute() (*AccountNonceResponse, *ht /* AccountsGetAccountNonce Get the current nonce of an account - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param agentID AgentID (Hex Address for L1 accounts | Hex for EVM) - @return ApiAccountsGetAccountNonceRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param agentID AgentID (Hex Address for L1 accounts | Hex for EVM) + @return ApiAccountsGetAccountNonceRequest */ func (a *CorecontractsAPIService) AccountsGetAccountNonce(ctx context.Context, agentID string) ApiAccountsGetAccountNonceRequest { return ApiAccountsGetAccountNonceRequest{ ApiService: a, - ctx: ctx, - agentID: agentID, + ctx: ctx, + agentID: agentID, } } // Execute executes the request -// @return AccountNonceResponse +// +// @return AccountNonceResponse func (a *CorecontractsAPIService) AccountsGetAccountNonceExecute(r ApiAccountsGetAccountNonceRequest) (*AccountNonceResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *AccountNonceResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *AccountNonceResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.AccountsGetAccountNonce") @@ -247,8 +248,8 @@ func (a *CorecontractsAPIService) AccountsGetAccountNonceExecute(r ApiAccountsGe newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -266,9 +267,9 @@ func (a *CorecontractsAPIService) AccountsGetAccountNonceExecute(r ApiAccountsGe } type ApiAccountsGetTotalAssetsRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -284,24 +285,25 @@ func (r ApiAccountsGetTotalAssetsRequest) Execute() (*AssetsResponse, *http.Resp /* AccountsGetTotalAssets Get all stored assets - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiAccountsGetTotalAssetsRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiAccountsGetTotalAssetsRequest */ func (a *CorecontractsAPIService) AccountsGetTotalAssets(ctx context.Context) ApiAccountsGetTotalAssetsRequest { return ApiAccountsGetTotalAssetsRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return AssetsResponse +// +// @return AssetsResponse func (a *CorecontractsAPIService) AccountsGetTotalAssetsExecute(r ApiAccountsGetTotalAssetsRequest) (*AssetsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *AssetsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *AssetsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.AccountsGetTotalAssets") @@ -364,8 +366,8 @@ func (a *CorecontractsAPIService) AccountsGetTotalAssetsExecute(r ApiAccountsGet newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -383,10 +385,10 @@ func (a *CorecontractsAPIService) AccountsGetTotalAssetsExecute(r ApiAccountsGet } type ApiBlocklogGetBlockInfoRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService blockIndex uint32 - block *string + block *string } // Block index or trie root @@ -402,26 +404,27 @@ func (r ApiBlocklogGetBlockInfoRequest) Execute() (*BlockInfoResponse, *http.Res /* BlocklogGetBlockInfo Get the block info of a certain block index - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param blockIndex BlockIndex (uint32) - @return ApiBlocklogGetBlockInfoRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param blockIndex BlockIndex (uint32) + @return ApiBlocklogGetBlockInfoRequest */ func (a *CorecontractsAPIService) BlocklogGetBlockInfo(ctx context.Context, blockIndex uint32) ApiBlocklogGetBlockInfoRequest { return ApiBlocklogGetBlockInfoRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, blockIndex: blockIndex, } } // Execute executes the request -// @return BlockInfoResponse +// +// @return BlockInfoResponse func (a *CorecontractsAPIService) BlocklogGetBlockInfoExecute(r ApiBlocklogGetBlockInfoRequest) (*BlockInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *BlockInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *BlockInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetBlockInfo") @@ -488,8 +491,8 @@ func (a *CorecontractsAPIService) BlocklogGetBlockInfoExecute(r ApiBlocklogGetBl newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -507,9 +510,9 @@ func (a *CorecontractsAPIService) BlocklogGetBlockInfoExecute(r ApiBlocklogGetBl } type ApiBlocklogGetControlAddressesRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -525,24 +528,25 @@ func (r ApiBlocklogGetControlAddressesRequest) Execute() (*ControlAddressesRespo /* BlocklogGetControlAddresses Get the control addresses - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiBlocklogGetControlAddressesRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiBlocklogGetControlAddressesRequest */ func (a *CorecontractsAPIService) BlocklogGetControlAddresses(ctx context.Context) ApiBlocklogGetControlAddressesRequest { return ApiBlocklogGetControlAddressesRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return ControlAddressesResponse +// +// @return ControlAddressesResponse func (a *CorecontractsAPIService) BlocklogGetControlAddressesExecute(r ApiBlocklogGetControlAddressesRequest) (*ControlAddressesResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ControlAddressesResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ControlAddressesResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetControlAddresses") @@ -605,8 +609,8 @@ func (a *CorecontractsAPIService) BlocklogGetControlAddressesExecute(r ApiBlockl newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -624,10 +628,10 @@ func (a *CorecontractsAPIService) BlocklogGetControlAddressesExecute(r ApiBlockl } type ApiBlocklogGetEventsOfBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService blockIndex uint32 - block *string + block *string } // Block index or trie root @@ -643,26 +647,27 @@ func (r ApiBlocklogGetEventsOfBlockRequest) Execute() (*EventsResponse, *http.Re /* BlocklogGetEventsOfBlock Get events of a block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param blockIndex BlockIndex (uint32) - @return ApiBlocklogGetEventsOfBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param blockIndex BlockIndex (uint32) + @return ApiBlocklogGetEventsOfBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetEventsOfBlock(ctx context.Context, blockIndex uint32) ApiBlocklogGetEventsOfBlockRequest { return ApiBlocklogGetEventsOfBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, blockIndex: blockIndex, } } // Execute executes the request -// @return EventsResponse +// +// @return EventsResponse func (a *CorecontractsAPIService) BlocklogGetEventsOfBlockExecute(r ApiBlocklogGetEventsOfBlockRequest) (*EventsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *EventsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *EventsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetEventsOfBlock") @@ -729,8 +734,8 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfBlockExecute(r ApiBlocklogG newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -748,9 +753,9 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfBlockExecute(r ApiBlocklogG } type ApiBlocklogGetEventsOfLatestBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -766,24 +771,25 @@ func (r ApiBlocklogGetEventsOfLatestBlockRequest) Execute() (*EventsResponse, *h /* BlocklogGetEventsOfLatestBlock Get events of the latest block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiBlocklogGetEventsOfLatestBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiBlocklogGetEventsOfLatestBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetEventsOfLatestBlock(ctx context.Context) ApiBlocklogGetEventsOfLatestBlockRequest { return ApiBlocklogGetEventsOfLatestBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return EventsResponse +// +// @return EventsResponse func (a *CorecontractsAPIService) BlocklogGetEventsOfLatestBlockExecute(r ApiBlocklogGetEventsOfLatestBlockRequest) (*EventsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *EventsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *EventsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetEventsOfLatestBlock") @@ -846,8 +852,8 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfLatestBlockExecute(r ApiBlo newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -865,10 +871,10 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfLatestBlockExecute(r ApiBlo } type ApiBlocklogGetEventsOfRequestRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - requestID string - block *string + requestID string + block *string } // Block index or trie root @@ -884,26 +890,27 @@ func (r ApiBlocklogGetEventsOfRequestRequest) Execute() (*EventsResponse, *http. /* BlocklogGetEventsOfRequest Get events of a request - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param requestID RequestID (Hex) - @return ApiBlocklogGetEventsOfRequestRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param requestID RequestID (Hex) + @return ApiBlocklogGetEventsOfRequestRequest */ func (a *CorecontractsAPIService) BlocklogGetEventsOfRequest(ctx context.Context, requestID string) ApiBlocklogGetEventsOfRequestRequest { return ApiBlocklogGetEventsOfRequestRequest{ ApiService: a, - ctx: ctx, - requestID: requestID, + ctx: ctx, + requestID: requestID, } } // Execute executes the request -// @return EventsResponse +// +// @return EventsResponse func (a *CorecontractsAPIService) BlocklogGetEventsOfRequestExecute(r ApiBlocklogGetEventsOfRequestRequest) (*EventsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *EventsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *EventsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetEventsOfRequest") @@ -967,8 +974,8 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfRequestExecute(r ApiBlocklo newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -986,9 +993,9 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfRequestExecute(r ApiBlocklo } type ApiBlocklogGetLatestBlockInfoRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -1004,24 +1011,25 @@ func (r ApiBlocklogGetLatestBlockInfoRequest) Execute() (*BlockInfoResponse, *ht /* BlocklogGetLatestBlockInfo Get the block info of the latest block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiBlocklogGetLatestBlockInfoRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiBlocklogGetLatestBlockInfoRequest */ func (a *CorecontractsAPIService) BlocklogGetLatestBlockInfo(ctx context.Context) ApiBlocklogGetLatestBlockInfoRequest { return ApiBlocklogGetLatestBlockInfoRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return BlockInfoResponse +// +// @return BlockInfoResponse func (a *CorecontractsAPIService) BlocklogGetLatestBlockInfoExecute(r ApiBlocklogGetLatestBlockInfoRequest) (*BlockInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *BlockInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *BlockInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetLatestBlockInfo") @@ -1084,8 +1092,8 @@ func (a *CorecontractsAPIService) BlocklogGetLatestBlockInfoExecute(r ApiBlocklo newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1103,10 +1111,10 @@ func (a *CorecontractsAPIService) BlocklogGetLatestBlockInfoExecute(r ApiBlocklo } type ApiBlocklogGetRequestIDsForBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService blockIndex uint32 - block *string + block *string } // Block index or trie root @@ -1122,26 +1130,27 @@ func (r ApiBlocklogGetRequestIDsForBlockRequest) Execute() (*RequestIDsResponse, /* BlocklogGetRequestIDsForBlock Get the request ids for a certain block index - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param blockIndex BlockIndex (uint32) - @return ApiBlocklogGetRequestIDsForBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param blockIndex BlockIndex (uint32) + @return ApiBlocklogGetRequestIDsForBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForBlock(ctx context.Context, blockIndex uint32) ApiBlocklogGetRequestIDsForBlockRequest { return ApiBlocklogGetRequestIDsForBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, blockIndex: blockIndex, } } // Execute executes the request -// @return RequestIDsResponse +// +// @return RequestIDsResponse func (a *CorecontractsAPIService) BlocklogGetRequestIDsForBlockExecute(r ApiBlocklogGetRequestIDsForBlockRequest) (*RequestIDsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *RequestIDsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *RequestIDsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestIDsForBlock") @@ -1208,8 +1217,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForBlockExecute(r ApiBloc newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1227,9 +1236,9 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForBlockExecute(r ApiBloc } type ApiBlocklogGetRequestIDsForLatestBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -1245,24 +1254,25 @@ func (r ApiBlocklogGetRequestIDsForLatestBlockRequest) Execute() (*RequestIDsRes /* BlocklogGetRequestIDsForLatestBlock Get the request ids for the latest block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiBlocklogGetRequestIDsForLatestBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiBlocklogGetRequestIDsForLatestBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForLatestBlock(ctx context.Context) ApiBlocklogGetRequestIDsForLatestBlockRequest { return ApiBlocklogGetRequestIDsForLatestBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return RequestIDsResponse +// +// @return RequestIDsResponse func (a *CorecontractsAPIService) BlocklogGetRequestIDsForLatestBlockExecute(r ApiBlocklogGetRequestIDsForLatestBlockRequest) (*RequestIDsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *RequestIDsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *RequestIDsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestIDsForLatestBlock") @@ -1325,8 +1335,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForLatestBlockExecute(r A newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1344,10 +1354,10 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForLatestBlockExecute(r A } type ApiBlocklogGetRequestIsProcessedRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - requestID string - block *string + requestID string + block *string } // Block index or trie root @@ -1363,26 +1373,27 @@ func (r ApiBlocklogGetRequestIsProcessedRequest) Execute() (*RequestProcessedRes /* BlocklogGetRequestIsProcessed Get the request processing status - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param requestID RequestID (Hex) - @return ApiBlocklogGetRequestIsProcessedRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param requestID RequestID (Hex) + @return ApiBlocklogGetRequestIsProcessedRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestIsProcessed(ctx context.Context, requestID string) ApiBlocklogGetRequestIsProcessedRequest { return ApiBlocklogGetRequestIsProcessedRequest{ ApiService: a, - ctx: ctx, - requestID: requestID, + ctx: ctx, + requestID: requestID, } } // Execute executes the request -// @return RequestProcessedResponse +// +// @return RequestProcessedResponse func (a *CorecontractsAPIService) BlocklogGetRequestIsProcessedExecute(r ApiBlocklogGetRequestIsProcessedRequest) (*RequestProcessedResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *RequestProcessedResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *RequestProcessedResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestIsProcessed") @@ -1446,8 +1457,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIsProcessedExecute(r ApiBloc newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1465,10 +1476,10 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIsProcessedExecute(r ApiBloc } type ApiBlocklogGetRequestReceiptRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - requestID string - block *string + requestID string + block *string } // Block index or trie root @@ -1484,26 +1495,27 @@ func (r ApiBlocklogGetRequestReceiptRequest) Execute() (*ReceiptResponse, *http. /* BlocklogGetRequestReceipt Get the receipt of a certain request id - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param requestID RequestID (Hex) - @return ApiBlocklogGetRequestReceiptRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param requestID RequestID (Hex) + @return ApiBlocklogGetRequestReceiptRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestReceipt(ctx context.Context, requestID string) ApiBlocklogGetRequestReceiptRequest { return ApiBlocklogGetRequestReceiptRequest{ ApiService: a, - ctx: ctx, - requestID: requestID, + ctx: ctx, + requestID: requestID, } } // Execute executes the request -// @return ReceiptResponse +// +// @return ReceiptResponse func (a *CorecontractsAPIService) BlocklogGetRequestReceiptExecute(r ApiBlocklogGetRequestReceiptRequest) (*ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ReceiptResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestReceipt") @@ -1567,8 +1579,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptExecute(r ApiBlocklog newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1586,10 +1598,10 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptExecute(r ApiBlocklog } type ApiBlocklogGetRequestReceiptsOfBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService blockIndex uint32 - block *string + block *string } // Block index or trie root @@ -1605,26 +1617,27 @@ func (r ApiBlocklogGetRequestReceiptsOfBlockRequest) Execute() ([]ReceiptRespons /* BlocklogGetRequestReceiptsOfBlock Get all receipts of a certain block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param blockIndex BlockIndex (uint32) - @return ApiBlocklogGetRequestReceiptsOfBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param blockIndex BlockIndex (uint32) + @return ApiBlocklogGetRequestReceiptsOfBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfBlock(ctx context.Context, blockIndex uint32) ApiBlocklogGetRequestReceiptsOfBlockRequest { return ApiBlocklogGetRequestReceiptsOfBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, blockIndex: blockIndex, } } // Execute executes the request -// @return []ReceiptResponse +// +// @return []ReceiptResponse func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfBlockExecute(r ApiBlocklogGetRequestReceiptsOfBlockRequest) ([]ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue []ReceiptResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestReceiptsOfBlock") @@ -1691,8 +1704,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfBlockExecute(r Api newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1710,9 +1723,9 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfBlockExecute(r Api } type ApiBlocklogGetRequestReceiptsOfLatestBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -1728,24 +1741,25 @@ func (r ApiBlocklogGetRequestReceiptsOfLatestBlockRequest) Execute() ([]ReceiptR /* BlocklogGetRequestReceiptsOfLatestBlock Get all receipts of the latest block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiBlocklogGetRequestReceiptsOfLatestBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiBlocklogGetRequestReceiptsOfLatestBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfLatestBlock(ctx context.Context) ApiBlocklogGetRequestReceiptsOfLatestBlockRequest { return ApiBlocklogGetRequestReceiptsOfLatestBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return []ReceiptResponse +// +// @return []ReceiptResponse func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfLatestBlockExecute(r ApiBlocklogGetRequestReceiptsOfLatestBlockRequest) ([]ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue []ReceiptResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestReceiptsOfLatestBlock") @@ -1808,8 +1822,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfLatestBlockExecute newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1827,12 +1841,12 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfLatestBlockExecute } type ApiErrorsGetErrorMessageFormatRequest struct { - ctx context.Context - ApiService *CorecontractsAPIService - chainID string + ctx context.Context + ApiService *CorecontractsAPIService + chainID string contractHname string - errorID uint32 - block *string + errorID uint32 + block *string } // Block index or trie root @@ -1848,30 +1862,31 @@ func (r ApiErrorsGetErrorMessageFormatRequest) Execute() (*ErrorMessageFormatRes /* ErrorsGetErrorMessageFormat Get the error message format of a specific error id - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param chainID ChainID (Hex Address) - @param contractHname Contract (Hname as Hex) - @param errorID Error Id (uint16) - @return ApiErrorsGetErrorMessageFormatRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param chainID ChainID (Hex Address) + @param contractHname Contract (Hname as Hex) + @param errorID Error Id (uint16) + @return ApiErrorsGetErrorMessageFormatRequest */ -func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormat(ctx context.Context, chainID string, contractHname string, errorID uint32) ApiErrorsGetErrorMessageFormatRequest { +func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormat(ctx context.Context, contractHname string, errorID uint32) ApiErrorsGetErrorMessageFormatRequest { return ApiErrorsGetErrorMessageFormatRequest{ - ApiService: a, - ctx: ctx, - chainID: chainID, + ApiService: a, + ctx: ctx, + chainID: chainID, contractHname: contractHname, - errorID: errorID, + errorID: errorID, } } // Execute executes the request -// @return ErrorMessageFormatResponse +// +// @return ErrorMessageFormatResponse func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormatExecute(r ApiErrorsGetErrorMessageFormatRequest) (*ErrorMessageFormatResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ErrorMessageFormatResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ErrorMessageFormatResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.ErrorsGetErrorMessageFormat") @@ -1940,8 +1955,8 @@ func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormatExecute(r ApiErrors newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1959,9 +1974,9 @@ func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormatExecute(r ApiErrors } type ApiGovernanceGetChainAdminRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -1979,24 +1994,25 @@ GovernanceGetChainAdmin Get the chain admin Returns the chain admin - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGovernanceGetChainAdminRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGovernanceGetChainAdminRequest */ func (a *CorecontractsAPIService) GovernanceGetChainAdmin(ctx context.Context) ApiGovernanceGetChainAdminRequest { return ApiGovernanceGetChainAdminRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return GovChainAdminResponse +// +// @return GovChainAdminResponse func (a *CorecontractsAPIService) GovernanceGetChainAdminExecute(r ApiGovernanceGetChainAdminRequest) (*GovChainAdminResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *GovChainAdminResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *GovChainAdminResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.GovernanceGetChainAdmin") @@ -2059,8 +2075,8 @@ func (a *CorecontractsAPIService) GovernanceGetChainAdminExecute(r ApiGovernance newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -2078,9 +2094,9 @@ func (a *CorecontractsAPIService) GovernanceGetChainAdminExecute(r ApiGovernance } type ApiGovernanceGetChainInfoRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -2098,24 +2114,25 @@ GovernanceGetChainInfo Get the chain info If you are using the common API functions, you most likely rather want to use '/v1/chains/:chainID' to get information about a chain. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGovernanceGetChainInfoRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGovernanceGetChainInfoRequest */ func (a *CorecontractsAPIService) GovernanceGetChainInfo(ctx context.Context) ApiGovernanceGetChainInfoRequest { return ApiGovernanceGetChainInfoRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// @return GovChainInfoResponse +// +// @return GovChainInfoResponse func (a *CorecontractsAPIService) GovernanceGetChainInfoExecute(r ApiGovernanceGetChainInfoRequest) (*GovChainInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *GovChainInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *GovChainInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.GovernanceGetChainInfo") @@ -2178,8 +2195,8 @@ func (a *CorecontractsAPIService) GovernanceGetChainInfoExecute(r ApiGovernanceG newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } diff --git a/clients/apiclient/model_chain_info_response.go b/clients/apiclient/model_chain_info_response.go index 151af22f54..b3c2d4c8a7 100644 --- a/clients/apiclient/model_chain_info_response.go +++ b/clients/apiclient/model_chain_info_response.go @@ -11,8 +11,8 @@ API version: 0 package apiclient import ( - "encoding/json" "bytes" + "encoding/json" "fmt" ) @@ -26,11 +26,11 @@ type ChainInfoResponse struct { // ChainID (Hex Address) ChainID string `json:"chainID"` // The EVM chain ID - EvmChainId uint32 `json:"evmChainId"` + EvmChainId uint32 `json:"evmChainId"` GasFeePolicy FeePolicy `json:"gasFeePolicy"` - GasLimits Limits `json:"gasLimits"` + GasLimits Limits `json:"gasLimits"` // Whether or not the chain is active - IsActive bool `json:"isActive"` + IsActive bool `json:"isActive"` Metadata PublicChainMetadata `json:"metadata"` // The fully qualified public url leading to the chains metadata PublicURL string `json:"publicURL"` @@ -42,7 +42,7 @@ type _ChainInfoResponse ChainInfoResponse // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewChainInfoResponse(chainAdmin string, chainID string, evmChainId uint32, gasFeePolicy FeePolicy, gasLimits Limits, isActive bool, metadata PublicChainMetadata, publicURL string) *ChainInfoResponse { +func NewChainInfoResponse(chainAdmin string, evmChainId uint32, gasFeePolicy FeePolicy, gasLimits Limits, isActive bool, metadata PublicChainMetadata, publicURL string) *ChainInfoResponse { this := ChainInfoResponse{} this.ChainAdmin = chainAdmin this.ChainID = chainID @@ -256,7 +256,7 @@ func (o *ChainInfoResponse) SetPublicURL(v string) { } func (o ChainInfoResponse) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() + toSerialize, err := o.ToMap() if err != nil { return []byte{}, err } @@ -296,10 +296,10 @@ func (o *ChainInfoResponse) UnmarshalJSON(data []byte) (err error) { err = json.Unmarshal(data, &allProperties) if err != nil { - return err; + return err } - for _, requiredProperty := range(requiredProperties) { + for _, requiredProperty := range requiredProperties { if _, exists := allProperties[requiredProperty]; !exists { return fmt.Errorf("no value given for required property %v", requiredProperty) } @@ -355,5 +355,3 @@ func (v *NullableChainInfoResponse) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } - - diff --git a/clients/apiclient/model_committee_info_response.go b/clients/apiclient/model_committee_info_response.go index 29ecd44ec1..6cfd0b1388 100644 --- a/clients/apiclient/model_committee_info_response.go +++ b/clients/apiclient/model_committee_info_response.go @@ -11,8 +11,8 @@ API version: 0 package apiclient import ( - "encoding/json" "bytes" + "encoding/json" "fmt" ) @@ -31,7 +31,7 @@ type CommitteeInfoResponse struct { ChainId string `json:"chainId"` // A list of all committee nodes and their peering info. CommitteeNodes []CommitteeNode `json:"committeeNodes"` - StateAddress string `json:"stateAddress"` + StateAddress string `json:"stateAddress"` } type _CommitteeInfoResponse CommitteeInfoResponse @@ -40,7 +40,7 @@ type _CommitteeInfoResponse CommitteeInfoResponse // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewCommitteeInfoResponse(accessNodes []CommitteeNode, active bool, candidateNodes []CommitteeNode, chainId string, committeeNodes []CommitteeNode, stateAddress string) *CommitteeInfoResponse { +func NewCommitteeInfoResponse(accessNodes []CommitteeNode, active bool, candidateNodes []CommitteeNode, committeeNodes []CommitteeNode, stateAddress string) *CommitteeInfoResponse { this := CommitteeInfoResponse{} this.AccessNodes = accessNodes this.Active = active @@ -204,7 +204,7 @@ func (o *CommitteeInfoResponse) SetStateAddress(v string) { } func (o CommitteeInfoResponse) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() + toSerialize, err := o.ToMap() if err != nil { return []byte{}, err } @@ -240,10 +240,10 @@ func (o *CommitteeInfoResponse) UnmarshalJSON(data []byte) (err error) { err = json.Unmarshal(data, &allProperties) if err != nil { - return err; + return err } - for _, requiredProperty := range(requiredProperties) { + for _, requiredProperty := range requiredProperties { if _, exists := allProperties[requiredProperty]; !exists { return fmt.Errorf("no value given for required property %v", requiredProperty) } @@ -299,5 +299,3 @@ func (v *NullableCommitteeInfoResponse) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } - - diff --git a/clients/apiclient/model_gov_chain_info_response.go b/clients/apiclient/model_gov_chain_info_response.go index ed7bc48d08..66ae167125 100644 --- a/clients/apiclient/model_gov_chain_info_response.go +++ b/clients/apiclient/model_gov_chain_info_response.go @@ -11,8 +11,8 @@ API version: 0 package apiclient import ( - "encoding/json" "bytes" + "encoding/json" "fmt" ) @@ -24,10 +24,10 @@ type GovChainInfoResponse struct { // The chain admin address (Hex Address). ChainAdmin string `json:"chainAdmin"` // ChainID (Hex Address). - ChainID string `json:"chainID"` - GasFeePolicy FeePolicy `json:"gasFeePolicy"` - GasLimits Limits `json:"gasLimits"` - Metadata GovPublicChainMetadata `json:"metadata"` + ChainID string `json:"chainID"` + GasFeePolicy FeePolicy `json:"gasFeePolicy"` + GasLimits Limits `json:"gasLimits"` + Metadata GovPublicChainMetadata `json:"metadata"` // The fully qualified public url leading to the chains metadata PublicURL string `json:"publicURL"` } @@ -38,7 +38,7 @@ type _GovChainInfoResponse GovChainInfoResponse // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewGovChainInfoResponse(chainAdmin string, chainID string, gasFeePolicy FeePolicy, gasLimits Limits, metadata GovPublicChainMetadata, publicURL string) *GovChainInfoResponse { +func NewGovChainInfoResponse(chainAdmin string, gasFeePolicy FeePolicy, gasLimits Limits, metadata GovPublicChainMetadata, publicURL string) *GovChainInfoResponse { this := GovChainInfoResponse{} this.ChainAdmin = chainAdmin this.ChainID = chainID @@ -202,7 +202,7 @@ func (o *GovChainInfoResponse) SetPublicURL(v string) { } func (o GovChainInfoResponse) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() + toSerialize, err := o.ToMap() if err != nil { return []byte{}, err } @@ -238,10 +238,10 @@ func (o *GovChainInfoResponse) UnmarshalJSON(data []byte) (err error) { err = json.Unmarshal(data, &allProperties) if err != nil { - return err; + return err } - for _, requiredProperty := range(requiredProperties) { + for _, requiredProperty := range requiredProperties { if _, exists := allProperties[requiredProperty]; !exists { return fmt.Errorf("no value given for required property %v", requiredProperty) } @@ -297,5 +297,3 @@ func (v *NullableGovChainInfoResponse) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } - - diff --git a/clients/apiclient/model_request_processed_response.go b/clients/apiclient/model_request_processed_response.go index 2b4054dfef..4c1fcb098f 100644 --- a/clients/apiclient/model_request_processed_response.go +++ b/clients/apiclient/model_request_processed_response.go @@ -11,8 +11,8 @@ API version: 0 package apiclient import ( - "encoding/json" "bytes" + "encoding/json" "fmt" ) @@ -21,9 +21,9 @@ var _ MappedNullable = &RequestProcessedResponse{} // RequestProcessedResponse struct for RequestProcessedResponse type RequestProcessedResponse struct { - ChainId string `json:"chainId"` - IsProcessed bool `json:"isProcessed"` - RequestId string `json:"requestId"` + ChainId string `json:"chainId"` + IsProcessed bool `json:"isProcessed"` + RequestId string `json:"requestId"` } type _RequestProcessedResponse RequestProcessedResponse @@ -32,7 +32,7 @@ type _RequestProcessedResponse RequestProcessedResponse // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewRequestProcessedResponse(chainId string, isProcessed bool, requestId string) *RequestProcessedResponse { +func NewRequestProcessedResponse(isProcessed bool, requestId string) *RequestProcessedResponse { this := RequestProcessedResponse{} this.ChainId = chainId this.IsProcessed = isProcessed @@ -121,7 +121,7 @@ func (o *RequestProcessedResponse) SetRequestId(v string) { } func (o RequestProcessedResponse) MarshalJSON() ([]byte, error) { - toSerialize,err := o.ToMap() + toSerialize, err := o.ToMap() if err != nil { return []byte{}, err } @@ -151,10 +151,10 @@ func (o *RequestProcessedResponse) UnmarshalJSON(data []byte) (err error) { err = json.Unmarshal(data, &allProperties) if err != nil { - return err; + return err } - for _, requiredProperty := range(requiredProperties) { + for _, requiredProperty := range requiredProperties { if _, exists := allProperties[requiredProperty]; !exists { return fmt.Errorf("no value given for required property %v", requiredProperty) } @@ -210,5 +210,3 @@ func (v *NullableRequestProcessedResponse) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } - - diff --git a/clients/chainclient/chainclient.go b/clients/chainclient/chainclient.go index b48214aeb6..88d031349d 100644 --- a/clients/chainclient/chainclient.go +++ b/clients/chainclient/chainclient.go @@ -33,7 +33,7 @@ type Client struct { func New( l1Client clients.L1Client, waspClient *apiclient.APIClient, - chainID isc.ChainID, + iscPackageID iotago.PackageID, keyPair cryptolib.Signer, ) *Client { diff --git a/clients/multiclient/activate.go b/clients/multiclient/activate.go index 2cf74d75eb..b8b3fdf265 100644 --- a/clients/multiclient/activate.go +++ b/clients/multiclient/activate.go @@ -5,11 +5,10 @@ import ( "context" "github.com/iotaledger/wasp/v2/clients/apiclient" - "github.com/iotaledger/wasp/v2/packages/isc" ) // ActivateChain sends a request to activate a chain in all wasp nodes -func (m *MultiClient) ActivateChain(chainID isc.ChainID) error { +func (m *MultiClient) ActivateChain() error { return m.Do(func(i int, w *apiclient.APIClient) error { _, err := w.ChainsAPI.ActivateChain(context.Background(), chainID.String()).Execute() return err diff --git a/clients/multiclient/reqstatus.go b/clients/multiclient/reqstatus.go index 361cc0c9c8..4515bd78ea 100644 --- a/clients/multiclient/reqstatus.go +++ b/clients/multiclient/reqstatus.go @@ -14,7 +14,7 @@ import ( ) // WaitUntilRequestProcessed blocks until the request has been processed by all nodes -func (m *MultiClient) WaitUntilRequestProcessed(ctx context.Context, chainID isc.ChainID, reqID isc.RequestID, waitForL1Confirmation bool, timeout time.Duration) (*apiclient.ReceiptResponse, error) { +func (m *MultiClient) WaitUntilRequestProcessed(ctx context.Context, reqID isc.RequestID, waitForL1Confirmation bool, timeout time.Duration) (*apiclient.ReceiptResponse, error) { oldTimeout := m.Timeout defer func() { m.Timeout = oldTimeout }() @@ -37,8 +37,8 @@ func (m *MultiClient) WaitUntilRequestProcessed(ctx context.Context, chainID isc // WaitUntilRequestProcessedSuccessfully is similar to WaitUntilRequestProcessed, // but also checks the receipt and return an error if the request was processed with an error -func (m *MultiClient) WaitUntilRequestProcessedSuccessfully(ctx context.Context, chainID isc.ChainID, reqID isc.RequestID, waitForL1Confirmation bool, timeout time.Duration) (*apiclient.ReceiptResponse, error) { - receipt, err := m.WaitUntilRequestProcessed(ctx, chainID, reqID, waitForL1Confirmation, timeout) +func (m *MultiClient) WaitUntilRequestProcessedSuccessfully(ctx context.Context, reqID isc.RequestID, waitForL1Confirmation bool, timeout time.Duration) (*apiclient.ReceiptResponse, error) { + receipt, err := m.WaitUntilRequestProcessed(ctx, reqID, waitForL1Confirmation, timeout) if err != nil { return receipt, err } @@ -50,9 +50,9 @@ func (m *MultiClient) WaitUntilRequestProcessedSuccessfully(ctx context.Context, // WaitUntilEVMRequestProcessedSuccessfully is similar to WaitUntilRequestProcessed, // but also checks the receipt and return an error if the request was processed with an error -func (m *MultiClient) WaitUntilEVMRequestProcessedSuccessfully(ctx context.Context, chainID isc.ChainID, txHash common.Hash, waitForL1Confirmation bool, timeout time.Duration) (*apiclient.ReceiptResponse, error) { +func (m *MultiClient) WaitUntilEVMRequestProcessedSuccessfully(ctx context.Context, txHash common.Hash, waitForL1Confirmation bool, timeout time.Duration) (*apiclient.ReceiptResponse, error) { requestID := isc.RequestIDFromEVMTxHash(txHash) - receipt, err := m.WaitUntilRequestProcessed(ctx, chainID, requestID, waitForL1Confirmation, timeout) + receipt, err := m.WaitUntilRequestProcessed(ctx, requestID, waitForL1Confirmation, timeout) if err != nil { return receipt, err } @@ -64,7 +64,7 @@ func (m *MultiClient) WaitUntilEVMRequestProcessedSuccessfully(ctx context.Conte // WaitUntilAllRequestsProcessed blocks until all requests in the given transaction have been processed // by all nodes -func (m *MultiClient) WaitUntilAllRequestsProcessed(ctx context.Context, chainID isc.ChainID, tx *iotajsonrpc.IotaTransactionBlockResponse, waitForL1Confirmation bool, timeout time.Duration) ([]*apiclient.ReceiptResponse, error) { +func (m *MultiClient) WaitUntilAllRequestsProcessed(ctx context.Context, tx *iotajsonrpc.IotaTransactionBlockResponse, waitForL1Confirmation bool, timeout time.Duration) ([]*apiclient.ReceiptResponse, error) { oldTimeout := m.Timeout defer func() { m.Timeout = oldTimeout }() @@ -82,8 +82,8 @@ func (m *MultiClient) WaitUntilAllRequestsProcessed(ctx context.Context, chainID // WaitUntilAllRequestsProcessedSuccessfully is similar to WaitUntilAllRequestsProcessed // but also checks the receipts and return an error if any of the requests was processed with an error -func (m *MultiClient) WaitUntilAllRequestsProcessedSuccessfully(ctx context.Context, chainID isc.ChainID, tx *iotajsonrpc.IotaTransactionBlockResponse, waitForL1Confirmation bool, timeout time.Duration) ([]*apiclient.ReceiptResponse, error) { - receipts, err := m.WaitUntilAllRequestsProcessed(ctx, chainID, tx, waitForL1Confirmation, timeout) +func (m *MultiClient) WaitUntilAllRequestsProcessedSuccessfully(ctx context.Context, tx *iotajsonrpc.IotaTransactionBlockResponse, waitForL1Confirmation bool, timeout time.Duration) ([]*apiclient.ReceiptResponse, error) { + receipts, err := m.WaitUntilAllRequestsProcessed(ctx, tx, waitForL1Confirmation, timeout) if err != nil { return receipts, err } diff --git a/components/chains/component.go b/components/chains/component.go index 47ce0a3084..708de3e749 100644 --- a/components/chains/component.go +++ b/components/chains/component.go @@ -44,7 +44,7 @@ type dependencies struct { dig.In ShutdownHandler *hiveshutdown.ShutdownHandler - Chains *chains.Chains + Chains *chains.ChainRunner } func initConfigParams(c *dig.Container) error { @@ -89,7 +89,7 @@ func provide(c *dig.Container) error { type chainsResult struct { dig.Out - Chains *chains.Chains + Chains *chains.ChainRunner } if err := c.Provide(func(deps chainsDeps) chainsResult { diff --git a/components/webapi/component.go b/components/webapi/component.go index e979335540..36ff3a4891 100644 --- a/components/webapi/component.go +++ b/components/webapi/component.go @@ -216,7 +216,7 @@ func provide(c *dig.Container) error { AppConfig *configuration.Configuration `name:"appConfig"` ShutdownHandler *shutdown.ShutdownHandler APICacheTTL time.Duration `name:"apiCacheTTL"` - Chains *chains.Chains + Chains *chains.ChainRunner ChainMetricsProvider *metrics.ChainMetricsProvider ChainRecordRegistryProvider registry.ChainRecordRegistryProvider DKShareRegistryProvider registry.DKShareRegistryProvider @@ -277,7 +277,7 @@ func provide(c *dig.Container) error { deps.ChainRecordRegistryProvider, deps.DKShareRegistryProvider, deps.NodeIdentityProvider, - func() *chains.Chains { + func() *chains.ChainRunner { return deps.Chains }, func() *dkg.Node { diff --git a/packages/apilib/deploychain.go b/packages/apilib/deploychain.go index 2d27876ccf..336c619a69 100644 --- a/packages/apilib/deploychain.go +++ b/packages/apilib/deploychain.go @@ -32,7 +32,7 @@ type CreateChainParams struct { } // DeployChain creates a new chain on specified committee address -func DeployChain(ctx context.Context, par CreateChainParams, anchorOwner *cryptolib.Address) (isc.ChainID, error) { +func DeployChain(ctx context.Context, par CreateChainParams, anchorOwner *cryptolib.Address) error { var err error textout := io.Discard if par.Textout != nil { @@ -71,8 +71,8 @@ func DeployChain(ctx context.Context, par CreateChainParams, anchorOwner *crypto } // ActivateChainOnNodes puts chain records into nodes and activates its -func ActivateChainOnNodes(clientResolver multiclient.ClientResolver, apiHosts []string, chainID isc.ChainID) error { +func ActivateChainOnNodes(clientResolver multiclient.ClientResolver, apiHosts []string) error { nodes := multiclient.New(clientResolver, apiHosts) // ------------ put chain records to hosts - return nodes.PutChainRecord(registry.NewChainRecord(chainID, true, []*cryptolib.PublicKey{})) + return nodes.PutChainRecord(registry.NewChainRecord(true, []*cryptolib.PublicKey{})) } diff --git a/packages/chain/chain.go b/packages/chain/chain.go index 4b07cda283..efd40c4405 100644 --- a/packages/chain/chain.go +++ b/packages/chain/chain.go @@ -32,7 +32,7 @@ type ChainNodeConn interface { // detached. AttachChain( ctx context.Context, - chainID isc.ChainID, + recvRequest RequestHandler, recvAnchor AnchorHandler, onChainConnect func(), @@ -42,15 +42,15 @@ type ChainNodeConn interface { // confirmed or an error is detected, or the ctx is canceled. PublishTX( ctx context.Context, - chainID isc.ChainID, + tx iotasigner.SignedTransaction, callback TxPostHandler, ) error // RefreshOnLedgerRequests synchronously fetches all owned requests by the // previously attached chain, and calls recvRequest for each one. - RefreshOnLedgerRequests(ctx context.Context, chainID isc.ChainID) + RefreshOnLedgerRequests(ctx context.Context) - GetGasCoinRef(ctx context.Context, chainID isc.ChainID) (*coin.CoinWithRef, error) + GetGasCoinRef(ctx context.Context) (*coin.CoinWithRef, error) } type NodeConnection interface { diff --git a/packages/chain/chain_listener.go b/packages/chain/chain_listener.go index 48c92ea64b..3248b601d4 100644 --- a/packages/chain/chain_listener.go +++ b/packages/chain/chain_listener.go @@ -6,7 +6,6 @@ package chain import ( "github.com/iotaledger/wasp/v2/packages/chain/mempool" "github.com/iotaledger/wasp/v2/packages/cryptolib" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/kv" "github.com/iotaledger/wasp/v2/packages/state" ) @@ -16,8 +15,8 @@ import ( // All the function MUST NOT BLOCK. type ChainListener interface { mempool.ChainListener - AccessNodesUpdated(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey) - ServerNodesUpdated(chainID isc.ChainID, serverNodes []*cryptolib.PublicKey) + AccessNodesUpdated(accessNodes []*cryptolib.PublicKey) + ServerNodesUpdated(serverNodes []*cryptolib.PublicKey) } //////////////////////////////////////////////////////////////////////////////// @@ -31,7 +30,7 @@ func NewEmptyChainListener() ChainListener { return &emptyChainListener{} } -func (ecl *emptyChainListener) BlockApplied(chainID isc.ChainID, block state.Block, latestState kv.KVStoreReader) { +func (ecl *emptyChainListener) BlockApplied(block state.Block, latestState kv.KVStoreReader) { } -func (ecl *emptyChainListener) AccessNodesUpdated(isc.ChainID, []*cryptolib.PublicKey) {} -func (ecl *emptyChainListener) ServerNodesUpdated(isc.ChainID, []*cryptolib.PublicKey) {} +func (ecl *emptyChainListener) AccessNodesUpdated([]*cryptolib.PublicKey) {} +func (ecl *emptyChainListener) ServerNodesUpdated([]*cryptolib.PublicKey) {} diff --git a/packages/chain/chainmanager/chain_manager.go b/packages/chain/chainmanager/chain_manager.go index 3b529aff63..5d0409ea4a 100644 --- a/packages/chain/chainmanager/chain_manager.go +++ b/packages/chain/chainmanager/chain_manager.go @@ -228,7 +228,7 @@ var ( func New( me gpa.NodeID, - chainID isc.ChainID, + chainStore state.Store, consensusStateRegistry cmtlog.ConsensusStateRegistry, dkShareRegistryProvider registry.DKShareRegistryProvider, @@ -259,7 +259,7 @@ func New( needPublishTX: shrinkingmap.New[hashing.HashValue, *NeedPublishTX](), needPublishCB: needPublishCB, dkShareRegistryProvider: dkShareRegistryProvider, - varAccessNodeState: NewVarAccessNodeState(chainID, log.NewChildLogger("VAS")), + varAccessNodeState: NewVarAccessNodeState(log.NewChildLogger("VAS")), me: me, nodeIDFromPubKey: nodeIDFromPubKey, deriveAOByQuorum: deriveAOByQuorum, diff --git a/packages/chain/chainmanager/var_access_nodes_state.go b/packages/chain/chainmanager/var_access_nodes_state.go index 10bef34a78..ccfccc2cbc 100644 --- a/packages/chain/chainmanager/var_access_nodes_state.go +++ b/packages/chain/chainmanager/var_access_nodes_state.go @@ -29,7 +29,7 @@ type varAccessNodeStateImpl struct { log log.Logger } -func NewVarAccessNodeState(chainID isc.ChainID, log log.Logger) VarAccessNodeState { +func NewVarAccessNodeState(log log.Logger) VarAccessNodeState { return &varAccessNodeStateImpl{ chainID: chainID, tipAO: nil, diff --git a/packages/chain/cmtlog/cmt_log.go b/packages/chain/cmtlog/cmt_log.go index 4834ff24dd..396ce67858 100644 --- a/packages/chain/cmtlog/cmt_log.go +++ b/packages/chain/cmtlog/cmt_log.go @@ -45,8 +45,8 @@ type State struct { // ConsensusStateRegistry is the interface used to store and recover the existing persistent state. // To be implemented by the registry. type ConsensusStateRegistry interface { - Get(chainID isc.ChainID, committeeAddress *cryptolib.Address) (*State, error) // Can return ErrCmtLogStateNotFound. - Set(chainID isc.ChainID, committeeAddress *cryptolib.Address, state *State) error + Get(committeeAddress *cryptolib.Address) (*State, error) // Can return ErrCmtLogStateNotFound. + Set(committeeAddress *cryptolib.Address, state *State) error } var ErrCmtLogStateNotFound = errors.New("errCmtLogStateNotFound") @@ -83,7 +83,7 @@ var _ gpa.GPA = &cmtLogImpl{} // > ... func New( me gpa.NodeID, - chainID isc.ChainID, + dkShare tcrypto.DKShare, consensusStateRegistry ConsensusStateRegistry, nodeIDFromPubKey func(pubKey *cryptolib.PublicKey) gpa.NodeID, @@ -96,7 +96,7 @@ func New( // // Load the last LogIndex we were working on. var prevLI LogIndex - state, err := consensusStateRegistry.Get(chainID, cmtAddr) + state, err := consensusStateRegistry.Get(cmtAddr) if err != nil { if !errors.Is(err, ErrCmtLogStateNotFound) { return nil, fmt.Errorf("cannot load cmtLogState for %v: %w", cmtAddr, err) @@ -141,7 +141,7 @@ func New( log: log, } persistLIFunc := func(li LogIndex) { - if err := consensusStateRegistry.Set(chainID, cmtAddr, &State{LogIndex: li}); err != nil { + if err := consensusStateRegistry.Set(cmtAddr, &State{LogIndex: li}); err != nil { // Nothing to do, if we cannot persist this. panic(fmt.Errorf("cannot persist the cmtLog state: %w", err)) } diff --git a/packages/chain/cmtlog/cmt_log_test.go b/packages/chain/cmtlog/cmt_log_test.go index e03c32f469..09ceb4e5c6 100644 --- a/packages/chain/cmtlog/cmt_log_test.go +++ b/packages/chain/cmtlog/cmt_log_test.go @@ -61,7 +61,7 @@ func testCmtLogBasic(t *testing.T, n, f int) { dkShare, err := committeeKeyShares[i].LoadDKShare(committeeAddress) require.NoError(t, err) consensusStateRegistry := testutil.NewConsensusStateRegistry() // Empty store in this case. - cmtLogInst, err := cmtlog.New(gpaNodeIDs[i], chainID, dkShare, consensusStateRegistry, gpa.NodeIDFromPublicKey, true, -1, nil, log.NewChildLogger(fmt.Sprintf("N%v", i))) + cmtLogInst, err := cmtlog.New(gpaNodeIDs[i], dkShare, consensusStateRegistry, gpa.NodeIDFromPublicKey, true, -1, nil, log.NewChildLogger(fmt.Sprintf("N%v", i))) require.NoError(t, err) gpaNodes[gpaNodeIDs[i]] = cmtLogInst.AsGPA() } diff --git a/packages/chain/cons/bp/bp_test.go b/packages/chain/cons/bp/bp_test.go index 7487f545e4..5bcafd824e 100644 --- a/packages/chain/cons/bp/bp_test.go +++ b/packages/chain/cons/bp/bp_test.go @@ -35,10 +35,10 @@ func TestOffLedgerOrdering(t *testing.T) { contract := governance.Contract.Hname() entryPoint := governance.FuncAddCandidateNode.Hname() gasBudget := gas.LimitsDefault.MaxGasPerRequest - r0 := isc.NewOffLedgerRequest(chainID, isc.NewMessage(contract, entryPoint, nil), 0, gasBudget).Sign(senderKP) - r1 := isc.NewOffLedgerRequest(chainID, isc.NewMessage(contract, entryPoint, nil), 1, gasBudget).Sign(senderKP) - r2 := isc.NewOffLedgerRequest(chainID, isc.NewMessage(contract, entryPoint, nil), 2, gasBudget).Sign(senderKP) - r3 := isc.NewOffLedgerRequest(chainID, isc.NewMessage(contract, entryPoint, nil), 3, gasBudget).Sign(senderKP) + r0 := isc.NewOffLedgerRequest(isc.NewMessage(contract, entryPoint, nil), 0, gasBudget).Sign(senderKP) + r1 := isc.NewOffLedgerRequest(isc.NewMessage(contract, entryPoint, nil), 1, gasBudget).Sign(senderKP) + r2 := isc.NewOffLedgerRequest(isc.NewMessage(contract, entryPoint, nil), 2, gasBudget).Sign(senderKP) + r3 := isc.NewOffLedgerRequest(isc.NewMessage(contract, entryPoint, nil), 3, gasBudget).Sign(senderKP) rs := []isc.Request{r3, r1, r0, r2} // Out of order. // // Construct the batch proposal, and aggregate it. diff --git a/packages/chain/cons/cons.go b/packages/chain/cons/cons.go index eb339d88f7..d6bed65084 100644 --- a/packages/chain/cons/cons.go +++ b/packages/chain/cons/cons.go @@ -143,7 +143,7 @@ var ( ) func New( //nolint:funlen - chainID isc.ChainID, + chainStore state.Store, me gpa.NodeID, mySK *cryptolib.PrivateKey, diff --git a/packages/chain/cons/cons_test.go b/packages/chain/cons/cons_test.go index 3954072b74..d18fdc69f4 100644 --- a/packages/chain/cons/cons_test.go +++ b/packages/chain/cons/cons_test.go @@ -375,7 +375,7 @@ func testChained(t *testing.T, n, f, b int) { testChainInsts[ii+1].input(nextInput) } testChainInsts[i] = *newTestConsInst( - t, chainID, committeeAddress, i, procCache, nodeIDs, + t, committeeAddress, i, procCache, nodeIDs, testNodeStates, peerIdentities, dkShareProviders, allRequests[i], doneCB, log, ) @@ -457,7 +457,7 @@ type testConsInst struct { func newTestConsInst( t *testing.T, - chainID isc.ChainID, + committeeAddress *cryptolib.Address, stateIndex int, procCache *processors.Cache, @@ -476,7 +476,7 @@ func newTestConsInst( nodeSK := peerIdentities[i].GetPrivateKey() nodeDKShare, err := dkShareRegistryProviders[i].LoadDKShare(committeeAddress) require.NoError(t, err) - nodes[nid] = cons.New(chainID, nodeStates[nid], nid, nodeSK, nodeDKShare, procCache, consInstID, gpa.NodeIDFromPublicKey, accounts.CommonAccount(), nodeLog).AsGPA() + nodes[nid] = cons.New(nodeStates[nid], nid, nodeSK, nodeDKShare, procCache, consInstID, gpa.NodeIDFromPublicKey, accounts.CommonAccount(), nodeLog).AsGPA() } tci := &testConsInst{ t: t, diff --git a/packages/chain/cons/gr/gr.go b/packages/chain/cons/gr/gr.go index 3fc0455277..0089c37646 100644 --- a/packages/chain/cons/gr/gr.go +++ b/packages/chain/cons/gr/gr.go @@ -157,7 +157,7 @@ type ConsGr struct { func New( ctx context.Context, - chainID isc.ChainID, + chainStore state.Store, dkShare tcrypto.DKShare, logIndex *cmtlog.LogIndex, diff --git a/packages/chain/mempool/mempool.go b/packages/chain/mempool/mempool.go index 57835f3e5d..2758bd4175 100644 --- a/packages/chain/mempool/mempool.go +++ b/packages/chain/mempool/mempool.go @@ -87,7 +87,7 @@ type ChainListener interface { // This function is called by the chain when new block is applied to the // state. This block might be not confirmed yet, but the chain is going // to build the next block on top of this one. - BlockApplied(chainID isc.ChainID, block state.Block, latestState kv.KVStoreReader) + BlockApplied(block state.Block, latestState kv.KVStoreReader) } type Mempool interface { @@ -212,7 +212,7 @@ type reqTrackNewChainHead struct { func New( ctx context.Context, - chainID isc.ChainID, + nodeIdentity *cryptolib.KeyPair, net peering.NetworkProvider, log log.Logger, diff --git a/packages/chain/node.go b/packages/chain/node.go index 2a21c3ad55..7c41713275 100644 --- a/packages/chain/node.go +++ b/packages/chain/node.go @@ -272,7 +272,7 @@ func New( mempoolBroadcastInterval time.Duration, originDeposit coin.Value, ) (Chain, error) { - log.LogDebugf("Starting the chain, chainID=%v", chainID) + log.LogDebugf("Starting the chain, chainID=%v") if listener == nil { listener = NewEmptyChainListener() } @@ -344,7 +344,6 @@ func New( // Create sub-components. chainMgr, err := chainmanager.New( cni.me, - cni.chainID, cni.chainStore, consensusStateRegistry, dkShareRegistryProvider, @@ -402,7 +401,6 @@ func New( peerPubKeys = append(peerPubKeys, cni.accessNodesFromNode...) stateMgr, err := statemanager.New( ctx, - cni.chainID, nodeIdentity.GetPublicKey(), peerPubKeys, net, @@ -420,7 +418,6 @@ func New( } mempool := mempool.New( ctx, - chainID, nodeIdentity, net, cni.log.NewChildLogger("MP"), @@ -429,7 +426,7 @@ func New( cni.listener, mempoolSettings, mempoolBroadcastInterval, - func() { nodeConn.RefreshOnLedgerRequests(ctx, chainID) }, + func() { nodeConn.RefreshOnLedgerRequests(ctx) }, ) cni.chainMgr = gpa.NewAckHandler(cni.me, chainMgr.AsGPA(), RedeliveryPeriod) @@ -466,7 +463,7 @@ func New( cni.chainMetrics.NodeConn.L1AnchorReceived() recvAnchorPipeInCh <- lo.T2(anchor, l1Params) } - err = nodeConn.AttachChain(ctx, chainID, recvRequestCB, recvAnchorCB, onChainConnect, onChainDisconnect) + err = nodeConn.AttachChain(ctx, recvRequestCB, recvAnchorCB, onChainConnect, onChainDisconnect) if err != nil { return nil, err } @@ -797,7 +794,7 @@ func (cni *chainNodeImpl) handleNeedPublishTX(ctx context.Context, upd *chainman cni.publishingTXes.Set(txDigest.HashValue(), subCancel) publishStart := time.Now() cni.log.LogDebugf("XXX: PublishTX %s ..., consumed anchor=%v", txDigest, needPublishTx.BaseAnchorRef) - if err := cni.nodeConn.PublishTX(subCtx, cni.chainID, *txToPost.Tx, func(_ iotasigner.SignedTransaction, newStateAnchor *isc.StateAnchor, err error) { + if err := cni.nodeConn.PublishTX(subCtx, *txToPost.Tx, func(_ iotasigner.SignedTransaction, newStateAnchor *isc.StateAnchor, err error) { cni.log.LogDebugf("XXX: PublishTX %s done, next anchor=%v, err=%v", txDigest, newStateAnchor, err) cni.chainMetrics.NodeConn.TXPublishResult(err == nil, time.Since(publishStart)) @@ -882,7 +879,7 @@ func (cni *chainNodeImpl) ensureConsensusInst(ctx context.Context, needConsensus consGrCtx, consGrCancel := context.WithCancel(ctx) logIndexCopy := addLogIndex cgr := consGR.New( - consGrCtx, cni.chainID, cni.chainStore, dkShare, &logIndexCopy, cni.nodeIdentity, + consGrCtx, cni.chainStore, dkShare, &logIndexCopy, cni.nodeIdentity, cni.procCache, cni.mempool, cni.stateMgr, cni.nodeConn, cni.net, @@ -988,7 +985,7 @@ func (cni *chainNodeImpl) updateAccessNodes(update func()) { cnSame := util.Same(oldCommitteeNodes, activeCommitteeNodes) if !anSame { cni.log.LogInfof("Access nodes updated, active=%+v", activeAccessNodes) - cni.listener.AccessNodesUpdated(cni.chainID, activeAccessNodes) + cni.listener.AccessNodesUpdated(activeAccessNodes) } if !anSame || !cnSame { if !cnSame { @@ -1010,7 +1007,7 @@ func (cni *chainNodeImpl) updateServerNodes(serverNodes []*cryptolib.PublicKey) cni.log.LogInfof("Server nodes updated, servers=%+v", serverNodes) cni.mempool.ServerNodesUpdated(activeCommitteeNodes, serverNodes) cni.stateMgr.ChainNodesUpdated(serverNodes, activeAccessNodes, activeCommitteeNodes) - cni.listener.ServerNodesUpdated(cni.chainID, serverNodes) + cni.listener.ServerNodesUpdated(serverNodes) } } @@ -1077,7 +1074,7 @@ func (cni *chainNodeImpl) LatestAnchor(freshness StateFreshness) (*isc.StateAnch } func (cni *chainNodeImpl) LatestGasCoin(freshness StateFreshness) (*coin.CoinWithRef, error) { - return cni.nodeConn.GetGasCoinRef(context.Background(), cni.chainID) + return cni.nodeConn.GetGasCoinRef(context.Background()) } func (cni *chainNodeImpl) LatestState(freshness StateFreshness) (state.State, error) { diff --git a/packages/chain/node_test.go b/packages/chain/node_test.go index 1029192a99..d2b74affce 100644 --- a/packages/chain/node_test.go +++ b/packages/chain/node_test.go @@ -288,7 +288,7 @@ func (tnc *testNodeConn) L1ParamsFetcher() parameters.L1ParamsFetcher { return tnc.l1ParamsFetcher } -func (tnc *testNodeConn) GetGasCoinRef(ctx context.Context, chainID isc.ChainID) (*coin.CoinWithRef, error) { +func (tnc *testNodeConn) GetGasCoinRef(ctx context.Context) (*coin.CoinWithRef, error) { panic("implement me") } @@ -310,7 +310,7 @@ func newTestNodeConn(t *testing.T, l1Client clients.L1Client, iscPackageID iotag func (tnc *testNodeConn) PublishTX( ctx context.Context, - chainID isc.ChainID, + tx iotasigner.SignedTransaction, callback chain.TxPostHandler, ) error { @@ -388,7 +388,7 @@ func (tnc *testNodeConn) PublishTX( func (tnc *testNodeConn) AttachChain( ctx context.Context, - chainID isc.ChainID, + recvRequest chain.RequestHandler, recvAnchor chain.AnchorHandler, onChainConnect func(), @@ -474,7 +474,7 @@ func (tgi *testNodeConnL1Info) GetGasCoins() []*coin.CoinWithRef { return tgi.g func (tgi *testNodeConnL1Info) GetL1Params() *parameters.L1Params { return tgi.l1params } // RefreshOnLedgerRequests implements chain.NodeConnection. -func (tnc *testNodeConn) RefreshOnLedgerRequests(ctx context.Context, chainID isc.ChainID) { +func (tnc *testNodeConn) RefreshOnLedgerRequests(ctx context.Context) { // noop } diff --git a/packages/chain/statemanager/gpa/state_manager_gpa.go b/packages/chain/statemanager/gpa/state_manager_gpa.go index 19eb8cb130..5f9fe3ef3b 100644 --- a/packages/chain/statemanager/gpa/state_manager_gpa.go +++ b/packages/chain/statemanager/gpa/state_manager_gpa.go @@ -51,7 +51,7 @@ type stateManagerGPA struct { var _ gpa.GPA = &stateManagerGPA{} func New( - chainID isc.ChainID, + loadedSnapshotStateIndex uint32, nr utils.NodeRandomiser, wal gpautils.BlockWAL, diff --git a/packages/chain/statemanager/gpa/test_env.go b/packages/chain/statemanager/gpa/test_env.go index 5b5dfb8546..c016515b91 100644 --- a/packages/chain/statemanager/gpa/test_env.go +++ b/packages/chain/statemanager/gpa/test_env.go @@ -131,7 +131,7 @@ func (teT *testEnv) addVariedNodes( snapshotManager := createSnapMFun(nodeID, teT.bf.GetStore(), store, teT.parameters.TimeProvider, smLog) loadedSnapshotStateIndex := snapshotManager.GetLoadedSnapshotStateIndex() stores[nodeID] = store - sms[nodeID], err = New(chainID, loadedSnapshotStateIndex, nr, wal, store, mockStateManagerMetrics(), smLog, teT.parameters) + sms[nodeID], err = New(loadedSnapshotStateIndex, nr, wal, store, mockStateManagerMetrics(), smLog, teT.parameters) require.NoError(teT.t, err) snapms[nodeID] = snapshotManager origin.InitChain(allmigrations.LatestSchemaVersion, store, teT.bf.GetChainInitParameters(), iotago.ObjectID{}, 0, parameterstest.L1Mock) diff --git a/packages/chain/statemanager/gpa/utils/block_wal.go b/packages/chain/statemanager/gpa/utils/block_wal.go index 572a979b1a..e1b14207f2 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal.go +++ b/packages/chain/statemanager/gpa/utils/block_wal.go @@ -15,7 +15,6 @@ import ( "github.com/iotaledger/hive.go/log" "github.com/iotaledger/hive.go/runtime/ioutils" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/metrics" "github.com/iotaledger/wasp/v2/packages/state" "github.com/iotaledger/wasp/v2/packages/util/rwutil" @@ -33,7 +32,7 @@ const ( constBlockWALTmpFileSuffix = ".tmp" ) -func NewBlockWAL(log log.Logger, baseDir string, chainID isc.ChainID, metrics *metrics.ChainBlockWALMetrics) (BlockWAL, error) { +func NewBlockWAL(log log.Logger, baseDir string, metrics *metrics.ChainBlockWALMetrics) (BlockWAL, error) { dir := filepath.Join(baseDir, chainID.String()) if err := ioutils.CreateDirectory(dir, 0o777); err != nil { return nil, fmt.Errorf("BlockWAL cannot create folder %v: %w", dir, err) diff --git a/packages/chain/statemanager/gpa/utils/block_wal_test.go b/packages/chain/statemanager/gpa/utils/block_wal_test.go index 2a1c9e1def..7aad2fa7ea 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal_test.go +++ b/packages/chain/statemanager/gpa/utils/block_wal_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/require" bcs "github.com/iotaledger/bcs-go" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/state" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" @@ -161,7 +160,7 @@ func TestBlockWALRestart(t *testing.T) { } } -func testReadAllByStateIndex(t *testing.T, addToWALFun func(isc.ChainID, BlockWAL, []state.Block)) { +func testReadAllByStateIndex(t *testing.T, addToWALFun func(BlockWAL, []state.Block)) { log := testlogger.NewLogger(t) defer log.Shutdown() defer cleanupAfterTest(t) @@ -204,7 +203,7 @@ func testReadAllByStateIndex(t *testing.T, addToWALFun func(isc.ChainID, BlockWA } func TestReadAllByStateIndexV1(t *testing.T) { - testReadAllByStateIndex(t, func(chainID isc.ChainID, wal BlockWAL, blocks []state.Block) { + testReadAllByStateIndex(t, func(wal BlockWAL, blocks []state.Block) { for _, block := range blocks { err := wal.Write(block) require.NoError(t, err) @@ -213,22 +212,22 @@ func TestReadAllByStateIndexV1(t *testing.T) { } func TestReadAllByStateIndexLegacy(t *testing.T) { - testReadAllByStateIndex(t, func(chainID isc.ChainID, wal BlockWAL, blocks []state.Block) { - writeBlocksLegacy(t, chainID, blocks) + testReadAllByStateIndex(t, func(wal BlockWAL, blocks []state.Block) { + writeBlocksLegacy(t, blocks) }) } -func walPathFromHash(chainID isc.ChainID, blockHash state.BlockHash) string { +func walPathFromHash(blockHash state.BlockHash) string { return filepath.Join(constTestFolder, chainID.String(), blockWALSubFolderName(blockHash), blockWALFileName(blockHash)) } -func walPathNoSubfolderFromHash(chainID isc.ChainID, blockHash state.BlockHash) string { +func walPathNoSubfolderFromHash(blockHash state.BlockHash) string { return filepath.Join(constTestFolder, chainID.String(), blockWALFileName(blockHash)) } -func writeBlocksLegacy(t *testing.T, chainID isc.ChainID, blocks []state.Block) { +func writeBlocksLegacy(t *testing.T, blocks []state.Block) { for _, block := range blocks { - filePath := walPathNoSubfolderFromHash(chainID, block.Hash()) + filePath := walPathNoSubfolderFromHash(block.Hash()) f, err := os.OpenFile(filePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o666) require.NoError(t, err) err = bcs.MarshalStream(&block, f) diff --git a/packages/chain/statemanager/snapshots/snapshot_manager.go b/packages/chain/statemanager/snapshots/snapshot_manager.go index 9c66698d71..888d4c0485 100644 --- a/packages/chain/statemanager/snapshots/snapshot_manager.go +++ b/packages/chain/statemanager/snapshots/snapshot_manager.go @@ -54,7 +54,7 @@ const ( func NewSnapshotManager( ctx context.Context, shutdownCoordinator *shutdown.Coordinator, - chainID isc.ChainID, + snapshotToLoad *state.BlockHash, createPeriod uint32, delayPeriod uint32, diff --git a/packages/chain/statemanager/snapshots/snapshot_manager_test.go b/packages/chain/statemanager/snapshots/snapshot_manager_test.go index adc91e74a6..38f23c388f 100644 --- a/packages/chain/statemanager/snapshots/snapshot_manager_test.go +++ b/packages/chain/statemanager/snapshots/snapshot_manager_test.go @@ -26,8 +26,8 @@ import ( const localSnapshotsPathConst = "testSnapshots" type ( - createNewNodeFun func(isc.ChainID, *state.BlockHash, state.Store, log.Logger) SnapshotManager - snapshotsAvailableFun func(isc.ChainID, []SnapshotInfo) + createNewNodeFun func(*state.BlockHash, state.Store, log.Logger) SnapshotManager + snapshotsAvailableFun func([]SnapshotInfo) ) var ( @@ -69,7 +69,7 @@ func testSnapshotManager( } func getLocalFuns(t *testing.T) (createNewNodeFun, snapshotsAvailableFun) { - return func(chainID isc.ChainID, snapshotToLoad *state.BlockHash, store state.Store, log log.Logger) SnapshotManager { + return func(snapshotToLoad *state.BlockHash, store state.Store, log log.Logger) SnapshotManager { snapshotManager, err := NewSnapshotManager( context.Background(), nil, @@ -86,7 +86,7 @@ func getLocalFuns(t *testing.T) (createNewNodeFun, snapshotsAvailableFun) { require.NoError(t, err) return snapshotManager }, - func(isc.ChainID, []SnapshotInfo) {} + func([]SnapshotInfo) {} } func getNetworkHTTPFuns(t *testing.T) (createNewNodeFun, snapshotsAvailableFun) { @@ -104,7 +104,7 @@ func getNetworkFileFuns(t *testing.T) (createNewNodeFun, snapshotsAvailableFun) } func getNetworkFuns(t *testing.T, networkPaths []string) (createNewNodeFun, snapshotsAvailableFun) { - return func(chainID isc.ChainID, snapshotToLoad *state.BlockHash, store state.Store, log log.Logger) SnapshotManager { + return func(snapshotToLoad *state.BlockHash, store state.Store, log log.Logger) SnapshotManager { snapshotManager, err := NewSnapshotManager( context.Background(), nil, @@ -121,7 +121,7 @@ func getNetworkFuns(t *testing.T, networkPaths []string) (createNewNodeFun, snap require.NoError(t, err) return snapshotManager }, - func(chainID isc.ChainID, snapshotInfos []SnapshotInfo) { + func(snapshotInfos []SnapshotInfo) { indexFilePath := filepath.Join(localSnapshotsCreatePathConst, chainID.String(), constIndexFileName) f, err := os.OpenFile(indexFilePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o666) require.NoError(t, err) @@ -228,7 +228,7 @@ func testSnapshotManagerAny( } } -func snapshotExists(t *testing.T, chainID isc.ChainID, stateIndex uint32, commitment *state.L1Commitment) bool { +func snapshotExists(t *testing.T, stateIndex uint32, commitment *state.L1Commitment) bool { path := filepath.Join(localSnapshotsCreatePathConst, chainID.String(), snapshotFileName(stateIndex, commitment.BlockHash())) exists, isDir, err := ioutils.PathExists(path) require.False(t, isDir) @@ -236,11 +236,11 @@ func snapshotExists(t *testing.T, chainID isc.ChainID, stateIndex uint32, commit return exists } -func waitForBlock(t *testing.T, chainID isc.ChainID, block state.Block, maxIterations int, sleep time.Duration) bool { +func waitForBlock(t *testing.T, block state.Block, maxIterations int, sleep time.Duration) bool { updateAndWaitFun := func() { time.Sleep(sleep) } - snapshotExistsFun := func() bool { return snapshotExists(t, chainID, block.StateIndex(), block.L1Commitment()) } + snapshotExistsFun := func() bool { return snapshotExists(t, block.StateIndex(), block.L1Commitment()) } return ensureTrue(t, fmt.Sprintf("block %v to be committed", block.StateIndex()), snapshotExistsFun, maxIterations, updateAndWaitFun) } diff --git a/packages/chain/statemanager/state_manager.go b/packages/chain/statemanager/state_manager.go index 7cae334448..f9b3d48042 100644 --- a/packages/chain/statemanager/state_manager.go +++ b/packages/chain/statemanager/state_manager.go @@ -110,7 +110,7 @@ const ( func New( ctx context.Context, - chainID isc.ChainID, + me *cryptolib.PublicKey, peerPubKeys []*cryptolib.PublicKey, net peering.NetworkProvider, @@ -125,7 +125,7 @@ func New( ) (StateMgr, error) { smLog := log.NewChildLogger("SM") nr := utils.NewNodeRandomiserNoInit(gpa.NodeIDFromPublicKey(me), smLog) - stateManagerGPA, err := smgpa.New(chainID, snapshotManager.GetLoadedSnapshotStateIndex(), nr, wal, store, metrics, smLog, parameters) + stateManagerGPA, err := smgpa.New(snapshotManager.GetLoadedSnapshotStateIndex(), nr, wal, store, metrics, smLog, parameters) if err != nil { smLog.LogErrorf("failed to create state manager GPA: %w", err) return nil, err diff --git a/packages/chains/accessmanager/access_manager.go b/packages/chains/accessmanager/access_manager.go index c2c9019db9..da8e3b2590 100644 --- a/packages/chains/accessmanager/access_manager.go +++ b/packages/chains/accessmanager/access_manager.go @@ -15,7 +15,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/chains/accessmanager/dist" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/peering" "github.com/iotaledger/wasp/v2/packages/util" "github.com/iotaledger/wasp/v2/packages/util/pipe" @@ -23,8 +22,8 @@ import ( type AccessMgr interface { TrustedNodes(trusted []*cryptolib.PublicKey) - ChainAccessNodes(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey) - ChainDismissed(chainID isc.ChainID) + ChainAccessNodes(accessNodes []*cryptolib.PublicKey) + ChainDismissed() } type accessMgrImpl struct { @@ -45,12 +44,10 @@ type reqTrustedNodes struct { } type reqChainAccessNodes struct { - chainID isc.ChainID accessNodes []*cryptolib.PublicKey } type reqChainDismissed struct { - chainID isc.ChainID } var _ AccessMgr = &accessMgrImpl{} @@ -67,7 +64,7 @@ const ( func New( ctx context.Context, - serversUpdatedCB func(chainID isc.ChainID, servers []*cryptolib.PublicKey), + serversUpdatedCB func(servers []*cryptolib.PublicKey), nodeIdentity *cryptolib.KeyPair, net peering.NetworkProvider, log log.Logger, @@ -110,13 +107,13 @@ func (ami *accessMgrImpl) TrustedNodes(trusted []*cryptolib.PublicKey) { } // Implements the AccessMgr interface. -func (ami *accessMgrImpl) ChainAccessNodes(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey) { - ami.reqChainAccessNodesPipe.In() <- &reqChainAccessNodes{chainID: chainID, accessNodes: accessNodes} +func (ami *accessMgrImpl) ChainAccessNodes(accessNodes []*cryptolib.PublicKey) { + ami.reqChainAccessNodesPipe.In() <- &reqChainAccessNodes{accessNodes: accessNodes} } // Implements the AccessMgr interface. -func (ami *accessMgrImpl) ChainDismissed(chainID isc.ChainID) { - ami.reqChainDismissedPipe.In() <- &reqChainDismissed{chainID: chainID} +func (ami *accessMgrImpl) ChainDismissed() { + ami.reqChainDismissedPipe.In() <- &reqChainDismissed{} } // A callback for amDist. @@ -180,13 +177,13 @@ func (ami *accessMgrImpl) handleReqTrustedNodes(recv *reqTrustedNodes) { } func (ami *accessMgrImpl) handleReqChainAccessNodes(recv *reqChainAccessNodes) { - ami.log.LogDebugf("handleReqChainAccessNodes: chainID=%v, access=%v", recv.chainID, recv.accessNodes) - ami.sendMessages(ami.dist.Input(dist.NewInputAccessNodes(recv.chainID, recv.accessNodes))) + ami.log.LogDebugf("handleReqChainAccessNodes: access=%v", recv.accessNodes) + ami.sendMessages(ami.dist.Input(dist.NewInputAccessNodes(recv.accessNodes))) } func (ami *accessMgrImpl) handleReqChainDismissed(recv *reqChainDismissed) { - ami.log.LogDebugf("handleReqChainDismissed: chainID=%v", recv.chainID) - ami.sendMessages(ami.dist.Input(dist.NewInputChainDisabled(recv.chainID))) + ami.log.LogDebugf("handleReqChainDismissed") + ami.sendMessages(ami.dist.Input(dist.NewInputChainDisabled())) } func (ami *accessMgrImpl) handleDistDebugTick() { diff --git a/packages/chains/accessmanager/access_manager_test.go b/packages/chains/accessmanager/access_manager_test.go index 7f45674161..eab2a6e496 100644 --- a/packages/chains/accessmanager/access_manager_test.go +++ b/packages/chains/accessmanager/access_manager_test.go @@ -16,8 +16,6 @@ import ( hivelog "github.com/iotaledger/hive.go/log" "github.com/iotaledger/wasp/v2/packages/chains/accessmanager" "github.com/iotaledger/wasp/v2/packages/cryptolib" - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" "github.com/iotaledger/wasp/v2/packages/testutil/testpeers" @@ -81,8 +79,8 @@ func testBasic(t *testing.T, n int, reliable bool) { nodeServers := make([][]*cryptolib.PublicKey, len(peerIdentities)) // That's the output. for i := range accessMgrs { ii := i - serversUpdatedCB := func(chainID isc.ChainID, servers []*cryptolib.PublicKey) { - t.Logf("servers updated, ChainID=%v, servers=%+v", chainID, servers) + serversUpdatedCB := func(servers []*cryptolib.PublicKey) { + t.Logf("servers updated, ChainID=%v, servers=%+v", servers) nodeServers[ii] = servers } accessMgrs[i] = accessmanager.New(ctx, serversUpdatedCB, peerIdentities[i], networkProviders[i], log.NewChildLogger(fmt.Sprintf("N#%v", i))) @@ -94,9 +92,8 @@ func testBasic(t *testing.T, n int, reliable bool) { } // // Everyone gives access to everyone. - chainID := isctest.RandomChainID() for _, am := range accessMgrs { - am.ChainAccessNodes(chainID, peerPubKeys) + am.ChainAccessNodes(peerPubKeys) } ctx, cancel := context.WithTimeout(context.Background(), testmisc.GetTimeout(1*time.Minute)) diff --git a/packages/chains/accessmanager/dist/access_manager_dist.go b/packages/chains/accessmanager/dist/access_manager_dist.go index bbaa6ceeb5..f489db204b 100644 --- a/packages/chains/accessmanager/dist/access_manager_dist.go +++ b/packages/chains/accessmanager/dist/access_manager_dist.go @@ -19,8 +19,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/util" ) type AccessMgr interface { @@ -28,15 +26,15 @@ type AccessMgr interface { } type Output interface { - ChainServerNodes(chainID isc.ChainID) []*cryptolib.PublicKey + ChainServerNodes() []*cryptolib.PublicKey } type accessMgrDist struct { - nodes *shrinkingmap.ShrinkingMap[gpa.NodeID, *accessMgrNode] // State for each peer. - chains *shrinkingmap.ShrinkingMap[isc.ChainID, *accessMgrChain] // State for each chain. - pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID // Convert PubKeys to NodeIDs. - serversUpdatedCB func(isc.ChainID, []*cryptolib.PublicKey) // Called when a set of servers has changed for a chain. - dismissPeerCB func(*cryptolib.PublicKey) // To stop redelivery at the upper layer. + nodes *shrinkingmap.ShrinkingMap[gpa.NodeID, *accessMgrNode] // State for each peer. + chain *accessMgrChain // State of chain. + pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID // Convert PubKeys to NodeIDs. + serversUpdatedCB func([]*cryptolib.PublicKey) // Called when a set of servers has changed for a chain. + dismissPeerCB func(*cryptolib.PublicKey) // To stop redelivery at the upper layer. log log.Logger } @@ -44,13 +42,12 @@ var _ gpa.GPA = &accessMgrDist{} func NewAccessMgr( pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID, - serversUpdatedCB func(chainID isc.ChainID, servers []*cryptolib.PublicKey), + serversUpdatedCB func(servers []*cryptolib.PublicKey), dismissPeerCB func(*cryptolib.PublicKey), log log.Logger, ) AccessMgr { return &accessMgrDist{ nodes: shrinkingmap.New[gpa.NodeID, *accessMgrNode](), - chains: shrinkingmap.New[isc.ChainID, *accessMgrChain](), pubKeyToNodeID: pubKeyToNodeID, serversUpdatedCB: serversUpdatedCB, dismissPeerCB: dismissPeerCB, @@ -64,11 +61,12 @@ func (amd *accessMgrDist) AsGPA() gpa.GPA { } // Implements the Output interface. -func (amd *accessMgrDist) ChainServerNodes(chainID isc.ChainID) []*cryptolib.PublicKey { - if chain, exists := amd.chains.Get(chainID); exists { - return chain.server.Values() +func (amd *accessMgrDist) ChainServerNodes() []*cryptolib.PublicKey { + if amd.chain == nil { + return []*cryptolib.PublicKey{} } - return []*cryptolib.PublicKey{} + + return amd.chain.server.Values() } // Implements the gpa.GPA interface. @@ -99,20 +97,19 @@ func (amd *accessMgrDist) Output() gpa.Output { // Implements the gpa.GPA interface. func (amd *accessMgrDist) StatusString() string { - return fmt.Sprintf("{accessMgr, |nodes|=%v, |chains|=%v}", amd.nodes.Size(), amd.chains.Size()) + return fmt.Sprintf("{accessMgr, |nodes|=%v, |hasChain|=%v}", amd.nodes.Size(), amd.chain != nil) } // > Notify all the trusted access nodes, that we will not serve the requests anymore. func (amd *accessMgrDist) handleInputChainDisabled(input *inputChainDisabled) gpa.OutMessages { - chain, exists := amd.chains.Get(input.chainID) - if !exists { + if amd.chain == nil { return nil // Already disabled. } - chain.Disabled() - amd.chains.Delete(input.chainID) + amd.chain.Disabled() + amd.chain = nil // Forget the chain. msgs := gpa.NoMessages() amd.nodes.ForEach(func(_ gpa.NodeID, node *accessMgrNode) bool { - msgs.AddAll(node.SetChainAccess(input.chainID, false)) + msgs.AddAll(node.SetChainAccess(false)) return true }) return msgs @@ -125,24 +122,22 @@ func (amd *accessMgrDist) handleInputChainDisabled(input *inputChainDisabled) gp func (amd *accessMgrDist) handleInputAccessNodes(input *inputAccessNodes) gpa.OutMessages { // // Update the info from the chain perspective. - chain, exists := amd.chains.Get(input.chainID) - if !exists { + if amd.chain == nil { initialServers := []*cryptolib.PublicKey{} amd.nodes.ForEach(func(_ gpa.NodeID, node *accessMgrNode) bool { - if node.serverFor.Has(input.chainID) { + if node.isServer { initialServers = append(initialServers, node.pubKey) } return true }) - chain = newAccessMgrChain(input.chainID, amd.pubKeyToNodeID, initialServers, amd.serversUpdatedCB, amd.log) - amd.chains.Set(input.chainID, chain) + amd.chain = newAccessMgrChain(amd.pubKeyToNodeID, initialServers, amd.serversUpdatedCB, amd.log) } - chain.AccessGrantedFor(input.accessNodes) + amd.chain.AccessGrantedFor(input.accessNodes) // // Update the info for each node. msgs := gpa.NoMessages() amd.nodes.ForEach(func(nodeID gpa.NodeID, node *accessMgrNode) bool { - msgs.AddAll(node.SetChainAccess(input.chainID, chain.IsAccessGrantedFor(nodeID))) + msgs.AddAll(node.SetChainAccess(amd.chain.IsAccessGrantedFor(nodeID))) return true }) return msgs @@ -159,14 +154,11 @@ func (amd *accessMgrDist) handleInputTrustedNodes(input *inputTrustedNodes) gpa. if amd.nodes.Has(trustedNodeID) { continue } - accessFor := newChainSet() - amd.chains.ForEach(func(chainID isc.ChainID, chain *accessMgrChain) bool { - if chain.IsAccessGrantedFor(trustedNodeID) { - accessFor.Add(chainID) - } - return true - }) - trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, accessFor) + hasAccess := false + if amd.chain.IsAccessGrantedFor(trustedNodeID) { + hasAccess = true + } + trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, hasAccess) msgs.AddAll(trustedNodeMsgs) amd.nodes.Set(trustedNodeID, trustedNode) } @@ -176,11 +168,9 @@ func (amd *accessMgrDist) handleInputTrustedNodes(input *inputTrustedNodes) gpa. if _, ok := trustedIndex[nodeID]; ok { return true } - amd.chains.ForEach(func(_ isc.ChainID, chain *accessMgrChain) bool { - chain.MarkAsServerFor(node.pubKey, false) - msgs.AddAll(node.SetChainAccess(chain.chainID, false)) - return true - }) + amd.chain.MarkAsServerFor(node.pubKey, false) + msgs.AddAll(node.SetChainAccess(false)) + amd.nodes.Delete(nodeID) amd.dismissPeerCB(node.pubKey) return true @@ -195,10 +185,7 @@ func (amd *accessMgrDist) handleMsgAccess(msg *msgAccess) gpa.OutMessages { } msgs := node.handleMsgAccess(msg) - amd.chains.ForEach(func(chainID isc.ChainID, chain *accessMgrChain) bool { - chain.MarkAsServerFor(node.pubKey, node.serverFor.Has(chainID)) - return true - }) + amd.chain.MarkAsServerFor(node.pubKey, node.isServer) return msgs } @@ -206,23 +193,21 @@ func (amd *accessMgrDist) handleMsgAccess(msg *msgAccess) gpa.OutMessages { //////////////////////////////////////////////////////////////////////////////// type accessMgrChain struct { - chainID isc.ChainID access map[gpa.NodeID]*cryptolib.PublicKey server *shrinkingmap.ShrinkingMap[gpa.NodeID, *cryptolib.PublicKey] pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID - serversUpdatedCB func(isc.ChainID, []*cryptolib.PublicKey) + serversUpdatedCB func([]*cryptolib.PublicKey) log log.Logger } func newAccessMgrChain( - chainID isc.ChainID, + pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID, initialServers []*cryptolib.PublicKey, - serversUpdatedCB func(isc.ChainID, []*cryptolib.PublicKey), + serversUpdatedCB func([]*cryptolib.PublicKey), log log.Logger, ) *accessMgrChain { amc := &accessMgrChain{ - chainID: chainID, access: map[gpa.NodeID]*cryptolib.PublicKey{}, server: shrinkingmap.New[gpa.NodeID, *cryptolib.PublicKey](), pubKeyToNodeID: pubKeyToNodeID, @@ -235,8 +220,8 @@ func newAccessMgrChain( } serverNodes := amc.server.Values() - amc.log.LogDebugf("Chain %v server nodes updated to %+v on init.", amc.chainID.ShortString(), serverNodes) - amc.serversUpdatedCB(amc.chainID, serverNodes) + amc.log.LogDebugf("Chain server nodes updated to %+v on init.", serverNodes) + amc.serversUpdatedCB(serverNodes) return amc } @@ -258,8 +243,8 @@ func (amc *accessMgrChain) MarkAsServerFor(nodePubKey *cryptolib.PublicKey, gran } if wasServer != granted { serverNodes := amc.server.Values() - amc.log.LogDebugf("Chain %v server nodes updated to %+v.", amc.chainID.ShortString(), serverNodes) - amc.serversUpdatedCB(amc.chainID, serverNodes) + amc.log.LogDebugf("Chain server nodes updated to %+v.", serverNodes) + amc.serversUpdatedCB(serverNodes) } } @@ -272,8 +257,8 @@ func (amc *accessMgrChain) Disabled() { if amc.server.Size() == 0 { return } - amc.log.LogDebugf("Chain %v server nodes updated to [] on dismiss.", amc.chainID.ShortString()) - amc.serversUpdatedCB(amc.chainID, []*cryptolib.PublicKey{}) + amc.log.LogDebugf("Chain server nodes updated to [] on dismiss.") + amc.serversUpdatedCB([]*cryptolib.PublicKey{}) } //////////////////////////////////////////////////////////////////////////////// @@ -283,83 +268,81 @@ type accessMgrNode struct { pubKey *cryptolib.PublicKey ourLC int peerLC int - accessFor *chainSet - serverFor *chainSet + hasAccess bool + isServer bool } func newAccessMgrNode( nodeID gpa.NodeID, pubKey *cryptolib.PublicKey, - accessFor *chainSet, + hasAccess bool, ) (*accessMgrNode, gpa.OutMessages) { amn := &accessMgrNode{ nodeID: nodeID, pubKey: pubKey, ourLC: 1, peerLC: 0, - accessFor: accessFor, - serverFor: newChainSet(), + hasAccess: hasAccess, + isServer: false, } msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice())) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) return amn, msgs } -func (amn *accessMgrNode) SetChainAccess(chainID isc.ChainID, access bool) gpa.OutMessages { +func (amn *accessMgrNode) SetChainAccess(access bool) gpa.OutMessages { if access { - return amn.grantAccess(chainID) + return amn.grantAccess() } - return amn.revokeAccess(chainID) + return amn.revokeAccess() } -func (amn *accessMgrNode) grantAccess(chainID isc.ChainID) gpa.OutMessages { - if amn.accessFor.Has(chainID) { +func (amn *accessMgrNode) grantAccess() gpa.OutMessages { + if amn.hasAccess { return nil } - amn.accessFor.Add(chainID) + amn.hasAccess = true amn.ourLC++ msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice())) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) return msgs } -func (amn *accessMgrNode) revokeAccess(chainID isc.ChainID) gpa.OutMessages { - if !amn.accessFor.Has(chainID) { +func (amn *accessMgrNode) revokeAccess() gpa.OutMessages { + if !amn.hasAccess { return nil } - amn.accessFor.Delete(chainID) + amn.hasAccess = false amn.ourLC++ msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice())) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) return msgs } func (amn *accessMgrNode) handleMsgAccess(msg *msgAccess) gpa.OutMessages { // This has to be checked before updating the state. - // > IF /\ m.access = serverForChains(n, m.src) \* Peer's info hasn't changed, so we don't need to ack it. - // > /\ m.server = H(accessForChains(n, m.src)) \* Our info echoed, so that was an ack. + // > IF /\ m.access = isServer(n, m.src) \* Peer's info hasn't changed, so we don't need to ack it. + // > /\ m.server = H(hasAccess(n, m.src)) \* Our info echoed, so that was an ack. // > /\ m.src_lc >= lClock[n][m.src] \* Peer's clock is not outdated, we don't need to push it forward. // > /\ m.dst_lc <= lClock[n][n] \* And the echoed clock don't exceed our clock, so we don't need to push it. // > THEN sendAndAck(m, {}) // > ELSE sendAndAck(m, accessMsgs(n)) sendDone := true && - util.Same(msg.accessForChains, amn.serverFor.AsSlice()) && - util.Same(msg.serverForChains, amn.accessFor.AsSlice()) && + msg.hasAccess == amn.isServer && + msg.isServer == amn.hasAccess && msg.senderLClock >= amn.peerLC && msg.receiverLClock <= amn.ourLC // - // Update serverFor and peerLC. + // Update isServer and peerLC. if msg.senderLClock > amn.peerLC { - amn.serverFor.FromSlice(msg.accessForChains) + amn.isServer = msg.hasAccess amn.peerLC = msg.senderLClock } // // Update ourLC. if amn.ourLC <= msg.receiverLClock { amn.ourLC = msg.receiverLClock - msgServerFor := newChainSet() - msgServerFor.FromSlice(msg.serverForChains) - if !amn.accessFor.Equals(msgServerFor) { + if !amn.hasAccess == msg.isServer { amn.ourLC++ } } @@ -367,58 +350,10 @@ func (amn *accessMgrNode) handleMsgAccess(msg *msgAccess) gpa.OutMessages { // Send message back, if needed. if !sendDone { return gpa.NoMessages().Add( - newMsgAccess(msg.Sender(), amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice()), + newMsgAccess(msg.Sender(), amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer), ) } return nil } //////////////////////////////////////////////////////////////////////////////// - -type chainSet struct { - elements *shrinkingmap.ShrinkingMap[isc.ChainID, struct{}] -} - -func newChainSet() *chainSet { - return &chainSet{elements: shrinkingmap.New[isc.ChainID, struct{}]()} -} - -func (cs *chainSet) Add(elem isc.ChainID) { - cs.elements.Set(elem, struct{}{}) -} - -func (cs *chainSet) Delete(elem isc.ChainID) { - cs.elements.Delete(elem) -} - -func (cs *chainSet) Has(elem isc.ChainID) bool { - return cs.elements.Has(elem) -} - -func (cs *chainSet) AsSlice() []isc.ChainID { - return cs.elements.Keys() -} - -func (cs *chainSet) FromSlice(els []isc.ChainID) { - cs.elements = shrinkingmap.New[isc.ChainID, struct{}]() - for _, el := range els { - cs.elements.Set(el, struct{}{}) - } -} - -func (cs *chainSet) Equals(other *chainSet) bool { - if cs.elements.Size() != other.elements.Size() { - return false - } - - equal := true - cs.elements.ForEach(func(ci isc.ChainID, s struct{}) bool { - if !other.elements.Has(ci) { - equal = false - return false - } - return true - }) - - return equal -} diff --git a/packages/chains/accessmanager/dist/access_manager_dist_test.go b/packages/chains/accessmanager/dist/access_manager_dist_test.go index 030e34500d..ce1371528f 100644 --- a/packages/chains/accessmanager/dist/access_manager_dist_test.go +++ b/packages/chains/accessmanager/dist/access_manager_dist_test.go @@ -12,8 +12,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/chains/accessmanager/dist" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" "github.com/iotaledger/wasp/v2/packages/testutil/testpeers" "github.com/iotaledger/wasp/v2/packages/util" @@ -30,7 +28,6 @@ func testBasic(t *testing.T, n int) { _, peerIdentities := testpeers.SetupKeys(uint16(n)) nodePubs := testpeers.PublicKeys(peerIdentities) nodeIDs := gpa.NodeIDsFromPublicKeys(nodePubs) - chainID := isctest.RandomChainID() servers := map[gpa.NodeID][]*cryptolib.PublicKey{} nodes := map[gpa.NodeID]gpa.GPA{} @@ -38,7 +35,7 @@ func testBasic(t *testing.T, n int) { nidCopy := nid nodes[nid] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, - func(ci isc.ChainID, pks []*cryptolib.PublicKey) { + func(pks []*cryptolib.PublicKey) { servers[nidCopy] = pks }, func(pk *cryptolib.PublicKey) {}, @@ -49,7 +46,7 @@ func testBasic(t *testing.T, n int) { tc := gpa.NewTestContext(nodes) for _, nid := range nodeIDs { tc.WithInput(nid, dist.NewInputTrustedNodes(nodePubs)) - tc.WithInput(nid, dist.NewInputAccessNodes(chainID, nodePubs)) + tc.WithInput(nid, dist.NewInputAccessNodes(nodePubs)) } tc.RunAll() for nid := range nodes { diff --git a/packages/chains/accessmanager/dist/access_manager_rapid_test.go b/packages/chains/accessmanager/dist/access_manager_rapid_test.go index 44b46d6b68..6b4eae742c 100644 --- a/packages/chains/accessmanager/dist/access_manager_rapid_test.go +++ b/packages/chains/accessmanager/dist/access_manager_rapid_test.go @@ -15,8 +15,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/chains/accessmanager/dist" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" "github.com/iotaledger/wasp/v2/packages/testutil/testpeers" "github.com/iotaledger/wasp/v2/packages/util" @@ -30,21 +28,19 @@ type accessMgrSM struct { nodeKeys []*cryptolib.KeyPair nodePubs []*cryptolib.PublicKey nodeIDs []gpa.NodeID - chainIDs []isc.ChainID genNodeID *rapid.Generator[gpa.NodeID] genNodePub *rapid.Generator[*cryptolib.PublicKey] genNodePubSlice *rapid.Generator[[]*cryptolib.PublicKey] - genChainID *rapid.Generator[isc.ChainID] // // These are set up for each scenario. tc *gpa.TestContext nodes map[gpa.NodeID]gpa.GPA - servers map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey + servers map[gpa.NodeID][]*cryptolib.PublicKey // // Model. mTrusted map[gpa.NodeID][]*cryptolib.PublicKey - mActive map[gpa.NodeID]map[isc.ChainID]bool - mAccess map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey + mActive map[gpa.NodeID]bool + mAccess map[gpa.NodeID][]*cryptolib.PublicKey } var _ rapid.StateMachine = &accessMgrSM{} @@ -56,33 +52,25 @@ func newAccessMgrSM(t *rapid.T, nodeCount, chainCount int) *accessMgrSM { _, sm.nodeKeys = testpeers.SetupKeys(uint16(nodeCount)) sm.nodePubs = testpeers.PublicKeys(sm.nodeKeys) sm.nodeIDs = gpa.NodeIDsFromPublicKeys(sm.nodePubs) - sm.chainIDs = make([]isc.ChainID, chainCount) - for i := range sm.chainIDs { - sm.chainIDs[i] = isctest.RandomChainID([]byte{byte(i)}) - } sm.genNodeID = rapid.SampledFrom(sm.nodeIDs) sm.genNodePub = rapid.SampledFrom(sm.nodePubs) sm.genNodePubSlice = rapid.SliceOfDistinct( sm.genNodePub, func(pub *cryptolib.PublicKey) cryptolib.PublicKeyKey { return pub.AsKey() }, ) - sm.genChainID = rapid.SampledFrom(sm.chainIDs) sm.initialized = true } - sm.servers = map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey{} + sm.servers = map[gpa.NodeID][]*cryptolib.PublicKey{} sm.nodes = map[gpa.NodeID]gpa.GPA{} for _, nid := range sm.nodeIDs { - sm.servers[nid] = map[isc.ChainID][]*cryptolib.PublicKey{} - for _, chainID := range sm.chainIDs { - sm.servers[nid][chainID] = []*cryptolib.PublicKey{} - } + sm.servers[nid] = []*cryptolib.PublicKey{} nidCopy := nid sm.nodes[nid] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, - func(chainID isc.ChainID, servers []*cryptolib.PublicKey) { - t.Logf("serversUpdatedCB: nodeID=%v, chainID=%v, servers=%v", nidCopy, chainID, servers) - sm.servers[nidCopy][chainID] = servers + func(servers []*cryptolib.PublicKey) { + t.Logf("serversUpdatedCB: nodeID=%v, chainID=%v, servers=%v", nidCopy, servers) + sm.servers[nidCopy] = servers }, func(pk *cryptolib.PublicKey) {}, sm.log.NewChildLogger(nid.ShortString()), @@ -91,16 +79,13 @@ func newAccessMgrSM(t *rapid.T, nodeCount, chainCount int) *accessMgrSM { sm.tc = gpa.NewTestContext(sm.nodes) sm.mTrusted = map[gpa.NodeID][]*cryptolib.PublicKey{} - sm.mActive = map[gpa.NodeID]map[isc.ChainID]bool{} - sm.mAccess = map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey{} + sm.mActive = map[gpa.NodeID]bool{} + sm.mAccess = map[gpa.NodeID][]*cryptolib.PublicKey{} for _, nid := range sm.nodeIDs { sm.mTrusted[nid] = []*cryptolib.PublicKey{} - sm.mAccess[nid] = map[isc.ChainID][]*cryptolib.PublicKey{} - sm.mActive[nid] = map[isc.ChainID]bool{} - for _, ch := range sm.chainIDs { - sm.mAccess[nid][ch] = []*cryptolib.PublicKey{} - sm.mActive[nid][ch] = false - } + sm.mAccess[nid] = []*cryptolib.PublicKey{} + sm.mAccess[nid] = []*cryptolib.PublicKey{} + sm.mActive[nid] = false } return sm } @@ -114,18 +99,16 @@ func (sm *accessMgrSM) InputTrustedNodes(t *rapid.T) { func (sm *accessMgrSM) InputAccessNodes(t *rapid.T) { nodeID := sm.genNodeID.Draw(t, "nodeID") - chainID := sm.genChainID.Draw(t, "chainID") accessNodes := sm.genNodePubSlice.Draw(t, "accessNodes") - sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(chainID, accessNodes)).RunAll() - sm.mActive[nodeID][chainID] = true - sm.mAccess[nodeID][chainID] = accessNodes + sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(accessNodes)).RunAll() + sm.mActive[nodeID] = true + sm.mAccess[nodeID] = accessNodes } func (sm *accessMgrSM) InputChainDisabled(t *rapid.T) { nodeID := sm.genNodeID.Draw(t, "nodeID") - chainID := sm.genChainID.Draw(t, "chainID") - sm.tc.WithInput(nodeID, dist.NewInputChainDisabled(chainID)).RunAll() - sm.mActive[nodeID][chainID] = false + sm.tc.WithInput(nodeID, dist.NewInputChainDisabled()).RunAll() + sm.mActive[nodeID] = false } func (sm *accessMgrSM) Reboot(t *rapid.T) { @@ -134,9 +117,9 @@ func (sm *accessMgrSM) Reboot(t *rapid.T) { // Just recreate a node. sm.nodes[nodeID] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, - func(chainID isc.ChainID, servers []*cryptolib.PublicKey) { - t.Logf("serversUpdatedCB: nodeID=%v, chainID=%v, servers=%v", nodeID, chainID, servers) - sm.servers[nodeID][chainID] = servers + func(servers []*cryptolib.PublicKey) { + t.Logf("serversUpdatedCB: nodeID=%v, chainID=%v, servers=%v", nodeID, servers) + sm.servers[nodeID] = servers }, func(pk *cryptolib.PublicKey) {}, sm.log.NewChildLogger(nodeID.ShortString()), @@ -145,11 +128,8 @@ func (sm *accessMgrSM) Reboot(t *rapid.T) { // Re-initialize all the persistent info: access information, active chains, trusted nodes. // But the servers are not restored here. The algorithm has to restore that. sm.tc.WithInput(nodeID, dist.NewInputTrustedNodes(sm.mTrusted[nodeID])) - for _, chainID := range sm.chainIDs { - if !sm.mActive[nodeID][chainID] { - continue - } - sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(chainID, sm.mAccess[nodeID][chainID])) + if sm.mActive[nodeID] { + sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(sm.mAccess[nodeID])) } sm.tc.RunAll() } @@ -157,24 +137,22 @@ func (sm *accessMgrSM) Reboot(t *rapid.T) { func (sm *accessMgrSM) Check(t *rapid.T) { for _, nodePub := range sm.nodePubs { nodeID := gpa.NodeIDFromPublicKey(nodePub) - for _, chainID := range sm.chainIDs { - shouldBeServers := []*cryptolib.PublicKey{} - for _, peerPub := range sm.nodePubs { - peerID := gpa.NodeIDFromPublicKey(peerPub) - if sm.mActive[nodeID][chainID] && - sm.mActive[peerID][chainID] && - lo.Contains(sm.mTrusted[peerID], nodePub) && - lo.Contains(sm.mTrusted[nodeID], peerPub) && - lo.Contains(sm.mAccess[peerID][chainID], nodePub) { - shouldBeServers = append(shouldBeServers, peerPub) - } + shouldBeServers := []*cryptolib.PublicKey{} + for _, peerPub := range sm.nodePubs { + peerID := gpa.NodeIDFromPublicKey(peerPub) + if sm.mActive[nodeID] && + sm.mActive[peerID] && + lo.Contains(sm.mTrusted[peerID], nodePub) && + lo.Contains(sm.mTrusted[nodeID], peerPub) && + lo.Contains(sm.mAccess[peerID], nodePub) { + shouldBeServers = append(shouldBeServers, peerPub) } - require.True(t, - util.Same(sm.servers[nodeID][chainID], shouldBeServers), - "nodeID=%v, chainID=%v, have=%v, expect=%v", - nodeID, chainID, sm.servers[nodeID][chainID], shouldBeServers, - ) } + require.True(t, + util.Same(sm.servers[nodeID], shouldBeServers), + "nodeID=%v, chainID=%v, have=%v, expect=%v", + nodeID, sm.servers[nodeID], shouldBeServers, + ) } } diff --git a/packages/chains/accessmanager/dist/input_access_nodes.go b/packages/chains/accessmanager/dist/input_access_nodes.go index f0f8d92a33..4c9f03ede5 100644 --- a/packages/chains/accessmanager/dist/input_access_nodes.go +++ b/packages/chains/accessmanager/dist/input_access_nodes.go @@ -6,16 +6,14 @@ package dist import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" ) type inputAccessNodes struct { - chainID isc.ChainID accessNodes []*cryptolib.PublicKey } var _ gpa.Input = &inputAccessNodes{} -func NewInputAccessNodes(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey) gpa.Input { - return &inputAccessNodes{chainID: chainID, accessNodes: accessNodes} +func NewInputAccessNodes(accessNodes []*cryptolib.PublicKey) gpa.Input { + return &inputAccessNodes{accessNodes: accessNodes} } diff --git a/packages/chains/accessmanager/dist/input_chain_disabled.go b/packages/chains/accessmanager/dist/input_chain_disabled.go index bcd9ff432c..d0eff0a0eb 100644 --- a/packages/chains/accessmanager/dist/input_chain_disabled.go +++ b/packages/chains/accessmanager/dist/input_chain_disabled.go @@ -2,13 +2,11 @@ package dist import ( "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" ) type inputChainDisabled struct { - chainID isc.ChainID } -func NewInputChainDisabled(chainID isc.ChainID) gpa.Input { - return &inputChainDisabled{chainID: chainID} +func NewInputChainDisabled() gpa.Input { + return &inputChainDisabled{} } diff --git a/packages/chains/accessmanager/dist/msg_access.go b/packages/chains/accessmanager/dist/msg_access.go index e68274e437..011683c688 100644 --- a/packages/chains/accessmanager/dist/msg_access.go +++ b/packages/chains/accessmanager/dist/msg_access.go @@ -5,16 +5,15 @@ package dist import ( "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" ) // Send by a node which has a chain enabled to a node it considers an access node. type msgAccess struct { gpa.BasicMessage - senderLClock int `bcs:"export,type=u32"` - receiverLClock int `bcs:"export,type=u32"` - accessForChains []isc.ChainID `bcs:"export,len_bytes=2"` - serverForChains []isc.ChainID `bcs:"export,len_bytes=2"` + senderLClock int `bcs:"export,type=u32"` + receiverLClock int `bcs:"export,type=u32"` + hasAccess bool `bcs:"export"` + isServer bool `bcs:"export"` } var _ gpa.Message = new(msgAccess) @@ -22,15 +21,15 @@ var _ gpa.Message = new(msgAccess) func newMsgAccess( recipient gpa.NodeID, senderLClock, receiverLClock int, - accessForChains []isc.ChainID, - serverForChains []isc.ChainID, + hasAccess bool, + isServer bool, ) gpa.Message { return &msgAccess{ - BasicMessage: gpa.NewBasicMessage(recipient), - senderLClock: senderLClock, - receiverLClock: receiverLClock, - accessForChains: accessForChains, - serverForChains: serverForChains, + BasicMessage: gpa.NewBasicMessage(recipient), + senderLClock: senderLClock, + receiverLClock: receiverLClock, + hasAccess: hasAccess, + isServer: isServer, } } diff --git a/packages/chains/accessmanager/dist/msg_access_test.go b/packages/chains/accessmanager/dist/msg_access_test.go index e1d0318528..d18b223546 100644 --- a/packages/chains/accessmanager/dist/msg_access_test.go +++ b/packages/chains/accessmanager/dist/msg_access_test.go @@ -10,8 +10,6 @@ import ( bcs "github.com/iotaledger/bcs-go" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" ) func TestMsgAccessSerialization(t *testing.T) { @@ -19,8 +17,8 @@ func TestMsgAccessSerialization(t *testing.T) { gpa.BasicMessage{}, rand.Intn(math.MaxUint32 + 1), rand.Intn(math.MaxUint32 + 1), - []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, - []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, + true, + true, } bcs.TestCodec(t, msg) @@ -29,8 +27,8 @@ func TestMsgAccessSerialization(t *testing.T) { gpa.BasicMessage{}, math.MaxUint32, math.MaxUint32, - []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, - []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, + true, + true, } bcs.TestCodec(t, msg) diff --git a/packages/chains/chains.go b/packages/chains/chains.go index 11f73d1566..9068acd9ef 100644 --- a/packages/chains/chains.go +++ b/packages/chains/chains.go @@ -8,11 +8,9 @@ import ( "context" "errors" "fmt" - "strings" "sync" "time" - "github.com/iotaledger/hive.go/ds/shrinkingmap" "github.com/iotaledger/hive.go/lo" "github.com/iotaledger/hive.go/log" @@ -38,11 +36,11 @@ import ( "github.com/iotaledger/wasp/v2/packages/webapi/interfaces" ) -type Provider func() *Chains // TODO: Use DI instead of that. +type Provider func() *ChainRunner // TODO: Use DI instead of that. -type ChainProvider func(chainID isc.ChainID) chain.Chain +type ChainProvider func() chain.Chain -type Chains struct { +type ChainRunner struct { ctx context.Context log log.Logger nodeConnection chain.NodeConnection @@ -71,8 +69,7 @@ type Chains struct { smStateManagerTimerTickPeriod time.Duration smPruningMinStatesToKeep int smPruningMaxStatesToDelete int - defaultSnapshotToLoad *state.BlockHash - snapshotsToLoad map[isc.ChainIDKey]state.BlockHash + snapshotToLoad *state.BlockHash snapshotPeriod uint32 snapshotDelay uint32 snapshotFolderPath string @@ -84,9 +81,10 @@ type Chains struct { consensusStateRegistry cmtlog.ConsensusStateRegistry chainListener chain.ChainListener - mutex *sync.RWMutex - allChains *shrinkingmap.ShrinkingMap[isc.ChainID, *activeChain] - accessMgr accessmanager.AccessMgr + mutex *sync.RWMutex + chain chain.Chain + chainCancelFunc context.CancelFunc + accessMgr accessmanager.AccessMgr cleanupFunc context.CancelFunc shutdownCoordinator *shutdown.Coordinator @@ -99,11 +97,6 @@ type Chains struct { mempoolBroadcastInterval time.Duration } -type activeChain struct { - chain chain.Chain - cancelFunc context.CancelFunc -} - func New( log log.Logger, nodeConnection chain.NodeConnection, @@ -130,7 +123,7 @@ func New( smStateManagerTimerTickPeriod time.Duration, smPruningMinStatesToKeep int, smPruningMaxStatesToDelete int, - snapshotsToLoad []string, + snapshotsToLoad string, snapshotPeriod uint32, snapshotDelay uint32, snapshotFolderPath string, @@ -144,7 +137,7 @@ func New( mempoolBroadcastInterval time.Duration, shutdownCoordinator *shutdown.Coordinator, chainMetricsProvider *metrics.ChainMetricsProvider, -) *Chains { +) *ChainRunner { var validatorFeeAddr *cryptolib.Address if validatorAddrStr != "" { addr, err := cryptolib.NewAddressFromHexString(validatorAddrStr) @@ -153,10 +146,9 @@ func New( } validatorFeeAddr = addr } - ret := &Chains{ + ret := &ChainRunner{ log: log, mutex: &sync.RWMutex{}, - allChains: shrinkingmap.New[isc.ChainID, *activeChain](), nodeConnection: nodeConnection, processorConfig: processorConfig, deriveAliasOutputByQuorum: deriveAliasOutputByQuorum, @@ -194,41 +186,22 @@ func New( chainMetricsProvider: chainMetricsProvider, validatorFeeAddr: validatorFeeAddr, } - ret.initSnapshotsToLoad(snapshotsToLoad) + ret.initSnapshotToLoad(snapshotsToLoad) ret.chainListener = NewChainsListener(chainListener, ret.chainAccessUpdatedCB) return ret } -func (c *Chains) initSnapshotsToLoad(configs []string) { - c.defaultSnapshotToLoad = nil - c.snapshotsToLoad = make(map[isc.ChainIDKey]state.BlockHash) - for _, config := range configs { - configSplit := strings.Split(config, ":") - // NOTE: Split does not return 0 length slice if second parameter is not zero length string; this is not checked - if len(configSplit) == 1 { - blockHash, err := state.BlockHashFromString(configSplit[0]) - if err != nil { - c.log.LogWarnf("Parsing snapshots to load: %s is not a block hash: %v", configSplit[0], err) - continue - } - c.defaultSnapshotToLoad = &blockHash - } else { - chainID, err := isc.ChainIDFromString(configSplit[0]) - if err != nil { - c.log.LogWarnf("Parsing snapshots to load: %s in %s is not a chain ID: %v", configSplit[0], config, err) - continue - } - blockHash, err := state.BlockHashFromString(configSplit[1]) - if err != nil { - c.log.LogWarnf("Parsing snapshots to load: %s in %s is not a block hash: %v", configSplit[1], config, err) - continue - } - c.snapshotsToLoad[chainID.Key()] = blockHash - } +func (c *ChainRunner) initSnapshotToLoad(config string) { + c.snapshotToLoad = nil + blockHash, err := state.BlockHashFromString(config) + if err != nil { + c.log.LogErrorf("Parsing snapshots to load: %s is not a block hash: %v", config, err) + return } + c.snapshotToLoad = &blockHash } -func (c *Chains) Run(ctx context.Context) error { +func (c *ChainRunner) Run(ctx context.Context) error { if err := c.nodeConnection.WaitUntilInitiallySynced(ctx); err != nil { return fmt.Errorf("waiting for L1 node to become sync failed, error: %w", err) } @@ -247,57 +220,62 @@ func (c *Chains) Run(ctx context.Context) error { unhook := c.chainRecordRegistryProvider.Events().ChainRecordModified.Hook(func(event *registry.ChainRecordModifiedEvent) { c.mutex.RLock() defer c.mutex.RUnlock() - if chain, exists := c.allChains.Get(event.ChainRecord.ChainID()); exists { - chain.chain.ConfigUpdated(event.ChainRecord.AccessNodes) + if c.chain != nil { + c.chain.ConfigUpdated(event.ChainRecord.AccessNodes) } }).Unhook c.cleanupFunc = unhook - return c.activateAllFromRegistry() //nolint:contextcheck + return c.activateFromRegistry() //nolint:contextcheck } -func (c *Chains) Close() { +func (c *ChainRunner) Close() { util.ExecuteIfNotNil(c.cleanupFunc) c.mutex.RLock() defer c.mutex.RUnlock() - c.allChains.ForEach(func(_ isc.ChainID, ac *activeChain) bool { - ac.cancelFunc() - return true - }) + c.chainCancelFunc() c.shutdownCoordinator.WaitNestedWithLogging(1 * time.Second) c.shutdownCoordinator.Done() util.ExecuteIfNotNil(c.trustedNetworkListenerCancel) c.trustedNetworkListenerCancel = nil } -func (c *Chains) trustedPeersUpdatedCB(trustedPeers []*peering.TrustedPeer) { +func (c *ChainRunner) trustedPeersUpdatedCB(trustedPeers []*peering.TrustedPeer) { trustedPubKeys := lo.Map(trustedPeers, func(tp *peering.TrustedPeer) *cryptolib.PublicKey { return tp.PubKey() }) c.accessMgr.TrustedNodes(trustedPubKeys) } -func (c *Chains) chainServersUpdatedCB(chainID isc.ChainID, servers []*cryptolib.PublicKey) { +func (c *ChainRunner) chainServersUpdatedCB(servers []*cryptolib.PublicKey) { c.mutex.RLock() defer c.mutex.RUnlock() - ch, exists := c.allChains.Get(chainID) - if !exists { + + if c.chain == nil { return } - ch.chain.ServersUpdated(servers) + + c.chain.ServersUpdated(servers) } -func (c *Chains) chainAccessUpdatedCB(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey) { - c.accessMgr.ChainAccessNodes(chainID, accessNodes) +func (c *ChainRunner) chainAccessUpdatedCB(accessNodes []*cryptolib.PublicKey) { + c.accessMgr.ChainAccessNodes(accessNodes) } -func (c *Chains) activateAllFromRegistry() error { +func (c *ChainRunner) activateFromRegistry() error { var innerErr error + var activatedChainID isc.ChainID if err := c.chainRecordRegistryProvider.ForEachActiveChainRecord(func(chainRecord *registry.ChainRecord) bool { + if !activatedChainID.Empty() { + innerErr = fmt.Errorf("more than one active chain in the registry: %s and %s", activatedChainID.String(), chainRecord.ChainID().String()) + return false + } + chainID := chainRecord.ChainID() if err := c.activateWithoutLocking(chainID); err != nil { innerErr = fmt.Errorf("cannot activate chain %s: %w", chainRecord.ChainID(), err) return false } + activatedChainID = chainID return true }); err != nil { return err @@ -307,7 +285,7 @@ func (c *Chains) activateAllFromRegistry() error { } // activateWithoutLocking activates a chain in the node. -func (c *Chains) activateWithoutLocking(chainID isc.ChainID) error { //nolint:funlen +func (c *ChainRunner) activateWithoutLocking(chainID isc.ChainID) error { //nolint:funlen if c.ctx == nil { return errors.New("run chains first") } @@ -317,15 +295,20 @@ func (c *Chains) activateWithoutLocking(chainID isc.ChainID) error { //nolint:fu // // Check, maybe it is already running. - if c.allChains.Has(chainID) { - c.log.LogDebugf("Chain %v = %v is already activated", chainID.ShortString(), chainID.String()) - return nil + if c.chain != nil { + if c.chain.ID() == chainID { + c.log.LogDebugf("Chain %v = %v is already activated", chainID.ShortString(), chainID.String()) + return nil + } + + return fmt.Errorf("cannot activate chain %v, another chain is already running: %v", chainID.ShortString(), c.chain.ID().ShortString()) } + // // Activate the chain in the persistent store, if it is not activated yet. chainRecord, err := c.chainRecordRegistryProvider.ChainRecord(chainID) if err != nil { - return fmt.Errorf("cannot get chain record for %v: %w", chainID, err) + return fmt.Errorf("cannot get chain record for %v: %w", err) } if !chainRecord.Active { if _, err2 := c.chainRecordRegistryProvider.ActivateChainRecord(chainID); err2 != nil { @@ -333,7 +316,7 @@ func (c *Chains) activateWithoutLocking(chainID isc.ChainID) error { //nolint:fu } } - chainKVStore, writeMutex, err := c.chainStateStoreProvider(chainID) + chainKVStore, writeMutex, err := c.chainStateStoreProvider() if err != nil { return fmt.Errorf("error when creating chain KV store: %w", err) } @@ -344,7 +327,7 @@ func (c *Chains) activateWithoutLocking(chainID isc.ChainID) error { //nolint:fu chainLog := c.log.NewChildLogger(chainID.ShortString()) var chainWAL utils.BlockWAL if c.walEnabled { - chainWAL, err = utils.NewBlockWAL(chainLog, c.walFolderPath, chainID, chainMetrics.BlockWAL) + chainWAL, err = utils.NewBlockWAL(chainLog, c.walFolderPath, chainMetrics.BlockWAL) if err != nil { panic(fmt.Errorf("cannot create WAL: %w", err)) } @@ -372,18 +355,10 @@ func (c *Chains) activateWithoutLocking(chainID isc.ChainID) error { //nolint:fu validatorAgentID = isc.NewAddressAgentID(c.validatorFeeAddr) } chainShutdownCoordinator := c.shutdownCoordinator.Nested(fmt.Sprintf("Chain-%s", chainID.AsAddress().String())) - blockHash, ok := c.snapshotsToLoad[chainID.Key()] - var snapshotToLoad *state.BlockHash - if ok { - snapshotToLoad = &blockHash - } else { - snapshotToLoad = c.defaultSnapshotToLoad - } chainSnapshotManager, err := snapshots.NewSnapshotManager( chainCtx, chainShutdownCoordinator.Nested("SnapMgr"), - chainID, - snapshotToLoad, + c.snapshotToLoad, c.snapshotPeriod, c.snapshotDelay, c.snapshotFolderPath, @@ -431,17 +406,15 @@ func (c *Chains) activateWithoutLocking(chainID isc.ChainID) error { //nolint:fu chainCancel() return fmt.Errorf("Chains.Activate: failed to create chain object: %w", err) } - c.allChains.Set(chainID, &activeChain{ - chain: newChain, - cancelFunc: chainCancel, - }) + c.chain = newChain + c.chainCancelFunc = chainCancel c.log.LogInfof("activated chain: %v = %s", chainID.ShortString(), chainID.String()) return nil } // Activate activates a chain in the node. -func (c *Chains) Activate(chainID isc.ChainID) error { +func (c *ChainRunner) Activate(chainID isc.ChainID) error { c.mutex.Lock() defer c.mutex.Unlock() @@ -449,55 +422,45 @@ func (c *Chains) Activate(chainID isc.ChainID) error { } // Deactivate a chain in the node. -func (c *Chains) Deactivate(chainID isc.ChainID) error { +func (c *ChainRunner) Deactivate() error { c.mutex.Lock() defer c.mutex.Unlock() - if _, err := c.chainRecordRegistryProvider.DeactivateChainRecord(chainID); err != nil { - return fmt.Errorf("cannot deactivate chain %v: %w", chainID, err) + if c.chain == nil { + c.log.LogDebugf("chain is not active") + return nil } - ch, exists := c.allChains.Get(chainID) - if !exists { - c.log.LogDebugf("chain is not active: %v = %s", chainID.ShortString(), chainID.String()) - return nil + if _, err := c.chainRecordRegistryProvider.DeactivateChainRecord(c.chain.ID()); err != nil { + return fmt.Errorf("cannot deactivate chain %v: %w", err) } - ch.cancelFunc() - c.accessMgr.ChainDismissed(chainID) - c.allChains.Delete(chainID) - c.log.LogDebugf("chain has been deactivated: %v = %s", chainID.ShortString(), chainID.String()) + + c.chainCancelFunc() + c.accessMgr.ChainDismissed() + + c.log.LogDebugf("chain has been deactivated: %v = %s", c.chain.ID().ShortString(), c.chain.ID().String()) + c.chain = nil + c.chainCancelFunc = nil + return nil } // Get returns active chain object or nil if it doesn't exist // lazy unsubscribing -func (c *Chains) Get(chainID isc.ChainID) (chain.Chain, error) { +func (c *ChainRunner) Get() (chain.Chain, error) { c.mutex.RLock() defer c.mutex.RUnlock() - ret, exists := c.allChains.Get(chainID) - if !exists { + if c.chain == nil { return nil, interfaces.ErrChainNotFound } - return ret.chain, nil -} - -func (c *Chains) GetFirst() (chain.Chain, error) { - c.mutex.RLock() - defer c.mutex.RUnlock() - - if c.allChains.Size() == 0 { - return nil, interfaces.ErrChainNotFound - } - - ret := c.allChains.Values()[0] - return ret.chain, nil + return c.chain, nil } -func (c *Chains) ValidatorAddress() *cryptolib.Address { +func (c *ChainRunner) ValidatorAddress() *cryptolib.Address { return c.validatorFeeAddr } -func (c *Chains) IsArchiveNode() bool { +func (c *ChainRunner) IsArchiveNode() bool { return c.smPruningMinStatesToKeep < 1 } diff --git a/packages/chains/chains_listener.go b/packages/chains/chains_listener.go index a9011514ec..a2ad64723e 100644 --- a/packages/chains/chains_listener.go +++ b/packages/chains/chains_listener.go @@ -6,29 +6,28 @@ package chains import ( "github.com/iotaledger/wasp/v2/packages/chain" "github.com/iotaledger/wasp/v2/packages/cryptolib" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/kv" "github.com/iotaledger/wasp/v2/packages/state" ) type chainsListener struct { parent chain.ChainListener - accessNodesCB func(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey) + accessNodesCB func(accessNodes []*cryptolib.PublicKey) } -func NewChainsListener(parent chain.ChainListener, accessNodesCB func(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey)) chain.ChainListener { +func NewChainsListener(parent chain.ChainListener, accessNodesCB func(accessNodes []*cryptolib.PublicKey)) chain.ChainListener { return &chainsListener{parent: parent, accessNodesCB: accessNodesCB} } -func (cl *chainsListener) BlockApplied(chainID isc.ChainID, block state.Block, latestState kv.KVStoreReader) { - cl.parent.BlockApplied(chainID, block, latestState) +func (cl *chainsListener) BlockApplied(block state.Block, latestState kv.KVStoreReader) { + cl.parent.BlockApplied(block, latestState) } -func (cl *chainsListener) AccessNodesUpdated(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey) { - cl.accessNodesCB(chainID, accessNodes) - cl.parent.AccessNodesUpdated(chainID, accessNodes) +func (cl *chainsListener) AccessNodesUpdated(accessNodes []*cryptolib.PublicKey) { + cl.accessNodesCB(accessNodes) + cl.parent.AccessNodesUpdated(accessNodes) } -func (cl *chainsListener) ServerNodesUpdated(chainID isc.ChainID, serverNodes []*cryptolib.PublicKey) { - cl.parent.ServerNodesUpdated(chainID, serverNodes) +func (cl *chainsListener) ServerNodesUpdated(serverNodes []*cryptolib.PublicKey) { + cl.parent.ServerNodesUpdated(serverNodes) } diff --git a/packages/chainutil/callview.go b/packages/chainutil/callview.go index 9d8a0de2c8..4d8d4d2d4c 100644 --- a/packages/chainutil/callview.go +++ b/packages/chainutil/callview.go @@ -11,13 +11,13 @@ import ( // CallView executes a view call on the latest block of the chain func CallView( - chainID isc.ChainID, + chainState state.State, processors *processors.Config, log log.Logger, msg isc.Message, ) (isc.CallArguments, error) { - vctx, err := viewcontext.New(chainID, chainState, processors, log, false) + vctx, err := viewcontext.New(chainState, processors, log, false) if err != nil { return nil, err } diff --git a/packages/chainutil/evmestimategas.go b/packages/chainutil/evmestimategas.go index bdfc9f5819..dd65ff3ae8 100644 --- a/packages/chainutil/evmestimategas.go +++ b/packages/chainutil/evmestimategas.go @@ -152,7 +152,7 @@ func EVMEstimateGas( return hi, nil } -func getChainInfo(chainID isc.ChainID, chainState state.State) *isc.ChainInfo { +func getChainInfo(chainState state.State) *isc.ChainInfo { return governance.NewStateReaderFromChainState(chainState).GetChainInfo(chainID) } diff --git a/packages/database/manager.go b/packages/database/manager.go index 2c51c76b64..32bceffa5c 100644 --- a/packages/database/manager.go +++ b/packages/database/manager.go @@ -20,7 +20,7 @@ const ( CacheSizeDefault = 1024 * 1024 * 32 ) -type ChainStateKVStoreProvider func(chainID isc.ChainID) (kvstore.KVStore, *sync.Mutex, error) +type ChainStateKVStoreProvider func() (kvstore.KVStore, *sync.Mutex, error) type ChainStateDatabaseManager struct { mutex sync.RWMutex @@ -79,7 +79,7 @@ func NewChainStateDatabaseManager(chainRecordRegistryProvider registry.ChainReco return m, nil } -func (m *ChainStateDatabaseManager) chainStateKVStore(chainID isc.ChainID) (kvstore.KVStore, *sync.Mutex) { +func (m *ChainStateDatabaseManager) chainStateKVStore() (kvstore.KVStore, *sync.Mutex) { m.mutex.RLock() defer m.mutex.RUnlock() @@ -91,7 +91,7 @@ func (m *ChainStateDatabaseManager) chainStateKVStore(chainID isc.ChainID) (kvst return databaseChainState.database.KVStore(), &databaseChainState.database.writeMutex } -func (m *ChainStateDatabaseManager) createDatabase(chainID isc.ChainID) (*databaseWithHealthTracker, error) { +func (m *ChainStateDatabaseManager) createDatabase() (*databaseWithHealthTracker, error) { m.mutex.Lock() defer m.mutex.Unlock() @@ -114,7 +114,7 @@ func (m *ChainStateDatabaseManager) createDatabase(chainID isc.ChainID) (*databa return databaseChainState, nil } -func (m *ChainStateDatabaseManager) ChainStateKVStore(chainID isc.ChainID) (kvstore.KVStore, *sync.Mutex, error) { +func (m *ChainStateDatabaseManager) ChainStateKVStore() (kvstore.KVStore, *sync.Mutex, error) { if store, writeMutex := m.chainStateKVStore(chainID); store != nil { return store, writeMutex, nil } diff --git a/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go b/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go index f67d95d176..3c1d47958b 100644 --- a/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go +++ b/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go @@ -546,7 +546,7 @@ func TestRPCEthChainID(t *testing.T) { var chainID hexutil.Uint err := env.RawClient.Call(&chainID, "eth_chainId") require.NoError(t, err) - require.EqualValues(t, evm.DefaultChainID, chainID) + require.EqualValues(t, evm.DefaultChainID) } func TestRPCTxRejectedIfNotEnoughFunds(t *testing.T) { diff --git a/packages/isc/chainid.go b/packages/isc/chainid.go index 9b3c45b803..0cc78c464f 100644 --- a/packages/isc/chainid.go +++ b/packages/isc/chainid.go @@ -39,7 +39,7 @@ func ChainIDFromBytes(data []byte) (ret ChainID, err error) { return bcs.Unmarshal[ChainID](data) } -func ChainIDFromString(hexAddress string) (ChainID, error) { +func ChainIDFromString(hexAddress string) error { addr, err := cryptolib.NewAddressFromHexString(hexAddress) if err != nil { return ChainID{}, err diff --git a/packages/isc/chainid_test.go b/packages/isc/chainid_test.go index 05a8a731d8..1bdcaef198 100644 --- a/packages/isc/chainid_test.go +++ b/packages/isc/chainid_test.go @@ -12,9 +12,9 @@ import ( func TestChainIDSerialization(t *testing.T) { chainID := isc.ChainID(*iotatest.RandomAddress()) - bcs.TestCodec(t, chainID) - rwutil.BytesTest(t, chainID, isc.ChainIDFromBytes) - rwutil.StringTest(t, chainID, isc.ChainIDFromString) + bcs.TestCodec(t) + rwutil.BytesTest(t, isc.ChainIDFromBytes) + rwutil.StringTest(t, isc.ChainIDFromString) bcs.TestCodecAndHash(t, isctest.TestChainID, "b4ff315a20ce") } diff --git a/packages/nodeconn/chain.go b/packages/nodeconn/chain.go index 678cf7361c..9cb3771dbd 100644 --- a/packages/nodeconn/chain.go +++ b/packages/nodeconn/chain.go @@ -45,7 +45,7 @@ type publishTxTask struct { func newNCChain( ctx context.Context, nodeConn *nodeConnection, - chainID isc.ChainID, + requestHandler chain.RequestHandler, anchorHandler chain.AnchorHandler, wsURL string, diff --git a/packages/nodeconn/nodeconn.go b/packages/nodeconn/nodeconn.go index 59e1305835..207c6a6f3e 100644 --- a/packages/nodeconn/nodeconn.go +++ b/packages/nodeconn/nodeconn.go @@ -97,7 +97,7 @@ func New( func (nc *nodeConnection) AttachChain( ctx context.Context, - chainID isc.ChainID, + recvRequest chain.RequestHandler, recvAnchor chain.AnchorHandler, onChainConnect func(), @@ -107,14 +107,14 @@ func (nc *nodeConnection) AttachChain( nc.chainsLock.Lock() defer nc.chainsLock.Unlock() - ncc, err := newNCChain(ctx, nc, chainID, recvRequest, recvAnchor, nc.wsURL, nc.httpURL) + ncc, err := newNCChain(ctx, nc, recvRequest, recvAnchor, nc.wsURL, nc.httpURL) if err != nil { return nil, err } - nc.chainsMap.Set(chainID, ncc) + nc.chainsMap.Set(ncc) util.ExecuteIfNotNil(onChainConnect) - nc.LogDebugf("chain registered: %s = %s", chainID.ShortString(), chainID) + nc.LogDebugf("chain registered: %s = %s", chainID.ShortString()) return ncc, nil }() @@ -123,7 +123,7 @@ func (nc *nodeConnection) AttachChain( } if err := ncc.syncChainState(ctx); err != nil { - nc.LogError(fmt.Sprintf("synchronizing chain state %s failed: %s", chainID, err.Error())) + nc.LogError(fmt.Sprintf("synchronizing chain state %s failed: %s", err.Error())) nc.shutdownHandler.SelfShutdown( fmt.Sprintf("Cannot sync chain %s with L1, %s", ncc.chainID, err.Error()), true) @@ -140,13 +140,13 @@ func (nc *nodeConnection) AttachChain( nc.chainsMap.Delete(chainID) util.ExecuteIfNotNil(onChainDisconnect) - nc.LogDebugf("chain unregistered: %s = %s, |remaining|=%v", chainID.ShortString(), chainID, nc.chainsMap.Size()) + nc.LogDebugf("chain unregistered: %s = %s, |remaining|=%v", chainID.ShortString(), nc.chainsMap.Size()) }() return nil } -func (nc *nodeConnection) GetGasCoinRef(ctx context.Context, chainID isc.ChainID) (*coin.CoinWithRef, error) { +func (nc *nodeConnection) GetGasCoinRef(ctx context.Context) (*coin.CoinWithRef, error) { ncChain, ok := nc.chainsMap.Get(chainID) if !ok { panic("unexpected chainID") @@ -210,7 +210,7 @@ func (nc *nodeConnection) ConsensusL1InfoProposal( return t } -func (nc *nodeConnection) RefreshOnLedgerRequests(ctx context.Context, chainID isc.ChainID) { +func (nc *nodeConnection) RefreshOnLedgerRequests(ctx context.Context) { ncChain, ok := nc.chainsMap.Get(chainID) if !ok { panic("unexpected chainID") @@ -249,7 +249,7 @@ func (nc *nodeConnection) L1ParamsFetcher() parameters.L1ParamsFetcher { } // GetChain returns the chain if it was registered, otherwise it returns an error. -func (nc *nodeConnection) getChain(chainID isc.ChainID) (*ncChain, error) { +func (nc *nodeConnection) getChain() (*ncChain, error) { nc.chainsLock.RLock() defer nc.chainsLock.RUnlock() @@ -262,7 +262,7 @@ func (nc *nodeConnection) getChain(chainID isc.ChainID) (*ncChain, error) { func (nc *nodeConnection) PublishTX( ctx context.Context, - chainID isc.ChainID, + tx iotasigner.SignedTransaction, callback chain.TxPostHandler, ) error { diff --git a/packages/publisher/publisher.go b/packages/publisher/publisher.go index da1d19faff..c21fd6ba28 100644 --- a/packages/publisher/publisher.go +++ b/packages/publisher/publisher.go @@ -59,19 +59,19 @@ func New(log log.Logger) *Publisher { // BlockApplied implements the chain.ChainListener interface. // NOTE: Do not block the caller! -func (p *Publisher) BlockApplied(chainID isc.ChainID, block state.Block, latestState kv.KVStoreReader) { +func (p *Publisher) BlockApplied(block state.Block, latestState kv.KVStoreReader) { p.blockAppliedPipe.In() <- &blockApplied{chainID: chainID, block: block, latestState: latestState} } // AccessNodesUpdated implements the chain.ChainListener interface. // NOTE: Do not block the caller! -func (p *Publisher) AccessNodesUpdated(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey) { +func (p *Publisher) AccessNodesUpdated(accessNodes []*cryptolib.PublicKey) { // We don't need this event. } // ServerNodesUpdated implements the chain.ChainListener interface. // NOTE: Do not block the caller! -func (p *Publisher) ServerNodesUpdated(chainID isc.ChainID, serverNodes []*cryptolib.PublicKey) { +func (p *Publisher) ServerNodesUpdated(serverNodes []*cryptolib.PublicKey) { // We don't need this event. } diff --git a/packages/solo/chain.go b/packages/solo/chain.go index 489642748a..cbc6747562 100644 --- a/packages/solo/chain.go +++ b/packages/solo/chain.go @@ -147,7 +147,7 @@ func (ch *Chain) DeployEVMContract(creator *ecdsa.PrivateKey, abiJSON string, by // - chainID // - agentID of the chain admin // - list of contracts deployed on the chain -func (ch *Chain) GetInfo() (isc.ChainID, isc.AgentID, map[isc.Hname]*root.ContractRecord) { +func (ch *Chain) GetInfo() (isc.AgentID, map[isc.Hname]*root.ContractRecord) { res, err := ch.CallView(governance.ViewGetChainAdmin.Message()) require.NoError(ch.Env.T, err) diff --git a/packages/testutil/chain_record_registry_provider.go b/packages/testutil/chain_record_registry_provider.go index 913fb3ba2e..e9ea77ba04 100644 --- a/packages/testutil/chain_record_registry_provider.go +++ b/packages/testutil/chain_record_registry_provider.go @@ -25,7 +25,7 @@ func (p *ChainRecordRegistryProvider) AddChainRecord(chainRecord *registry.Chain return nil } -func (p *ChainRecordRegistryProvider) LoadChainRecord(chainID isc.ChainID) (*registry.ChainRecord, error) { +func (p *ChainRecordRegistryProvider) LoadChainRecord() (*registry.ChainRecord, error) { ret := p.DB[chainID] return ret, nil } diff --git a/packages/testutil/dummyrequest.go b/packages/testutil/dummyrequest.go index 4771686c95..7d9fce3570 100644 --- a/packages/testutil/dummyrequest.go +++ b/packages/testutil/dummyrequest.go @@ -21,14 +21,14 @@ func DummyOffledgerRequest() isc.OffLedgerRequest { return req.Sign(keys) } -func DummyOffledgerRequestForAccount(chainID isc.ChainID, nonce uint64, kp *cryptolib.KeyPair) isc.OffLedgerRequest { +func DummyOffledgerRequestForAccount(nonce uint64, kp *cryptolib.KeyPair) isc.OffLedgerRequest { contract := isc.Hn("somecontract") entrypoint := isc.Hn("someentrypoint") - req := isc.NewOffLedgerRequest(chainID, isc.NewMessage(contract, entrypoint), nonce, gas.LimitsDefault.MaxGasPerRequest) + req := isc.NewOffLedgerRequest(isc.NewMessage(contract, entrypoint), nonce, gas.LimitsDefault.MaxGasPerRequest) return req.Sign(kp) } -func DummyEVMRequest(chainID isc.ChainID, gasPrice *big.Int) isc.OffLedgerRequest { +func DummyEVMRequest(gasPrice *big.Int) isc.OffLedgerRequest { key, err := crypto.GenerateKey() if err != nil { panic(err) @@ -44,7 +44,7 @@ func DummyEVMRequest(chainID isc.ChainID, gasPrice *big.Int) isc.OffLedgerReques Data: []byte{}, }) - req, err := isc.NewEVMOffLedgerTxRequest(chainID, tx) + req, err := isc.NewEVMOffLedgerTxRequest(tx) if err != nil { panic(err) } diff --git a/packages/testutil/mocked_cnsensus_state_registry.go b/packages/testutil/mocked_cnsensus_state_registry.go index 9f9a5f7e60..a277ba2758 100644 --- a/packages/testutil/mocked_cnsensus_state_registry.go +++ b/packages/testutil/mocked_cnsensus_state_registry.go @@ -3,7 +3,6 @@ package testutil import ( "github.com/iotaledger/wasp/v2/packages/chain/cmtlog" "github.com/iotaledger/wasp/v2/packages/cryptolib" - "github.com/iotaledger/wasp/v2/packages/isc" ) type mockedConsensusStateRegistry struct { @@ -24,14 +23,14 @@ func NewConsensusStateRegistry() cmtlog.ConsensusStateRegistry { return &mockedConsensusStateRegistry{data: map[cryptolib.AddressKey]*cmtlog.State{}} } -func (s *mockedConsensusStateRegistry) Get(chainID isc.ChainID, cmtAddr *cryptolib.Address) (*cmtlog.State, error) { +func (s *mockedConsensusStateRegistry) Get(cmtAddr *cryptolib.Address) (*cmtlog.State, error) { if store, ok := s.data[cmtAddr.Key()]; ok { return store, nil } return nil, cmtlog.ErrCmtLogStateNotFound } -func (s *mockedConsensusStateRegistry) Set(chainID isc.ChainID, cmtAddr *cryptolib.Address, state *cmtlog.State) error { +func (s *mockedConsensusStateRegistry) Set(cmtAddr *cryptolib.Address, state *cmtlog.State) error { s.data[cmtAddr.Key()] = state return nil } diff --git a/packages/transaction/change_gov_controller.go b/packages/transaction/change_gov_controller.go index e8c8d18e92..125ea332e1 100644 --- a/packages/transaction/change_gov_controller.go +++ b/packages/transaction/change_gov_controller.go @@ -4,11 +4,10 @@ package transaction import ( "github.com/iotaledger/wasp/v2/clients/iota-go/iotago" "github.com/iotaledger/wasp/v2/packages/cryptolib" - "github.com/iotaledger/wasp/v2/packages/isc" ) func NewChangeGovControllerTx( - chainID isc.ChainID, + newGovController iotago.Address, // utxos iotago.OutputSet, wallet cryptolib.Signer, diff --git a/packages/vm/core/evm/emulator/emulator.go b/packages/vm/core/evm/emulator/emulator.go index 67a6f1e410..45a27f601e 100644 --- a/packages/vm/core/evm/emulator/emulator.go +++ b/packages/vm/core/evm/emulator/emulator.go @@ -91,7 +91,7 @@ func getConfig(chainID int) *params.ChainConfig { if !c.IsShanghai(common.Big0, 0) { panic("ChainConfig should report EVM version as Shanghai") } - configCache.Add(chainID, c) + configCache.Add(c) return c } @@ -128,7 +128,7 @@ func Init( if bdb.Initialized() { panic("evm state already initialized in kvstore") } - bdb.Init(chainID, timestamp) + bdb.Init(timestamp) stateDBSubrealm := StateDBSubrealm(emulatorState) for addr, account := range alloc { diff --git a/packages/vm/core/governance/internal.go b/packages/vm/core/governance/internal.go index cf73bbab72..9a43d77db3 100644 --- a/packages/vm/core/governance/internal.go +++ b/packages/vm/core/governance/internal.go @@ -29,7 +29,7 @@ func (s *StateWriter) SetInitialState(chainAdmin isc.AgentID, blockKeepAmount in } // GetChainInfo returns global variables of the chain -func (s *StateReader) GetChainInfo(chainID isc.ChainID) *isc.ChainInfo { +func (s *StateReader) GetChainInfo() *isc.ChainInfo { ret := &isc.ChainInfo{ Metadata: &isc.PublicChainMetadata{}, ChainID: chainID, diff --git a/packages/vm/core/testcore/root_test.go b/packages/vm/core/testcore/root_test.go index 2cb5ccc909..9c788b546d 100644 --- a/packages/vm/core/testcore/root_test.go +++ b/packages/vm/core/testcore/root_test.go @@ -44,7 +44,7 @@ func TestGetInfo(t *testing.T) { chainID, admin, contracts := chain.GetInfo() - require.EqualValues(t, chain.ChainID, chainID) + require.EqualValues(t, chain.ChainID) require.EqualValues(t, chain.AdminAgentID(), admin) require.GreaterOrEqual(t, len(contracts), len(corecontracts.All)) diff --git a/packages/vm/viewcontext/viewcontext.go b/packages/vm/viewcontext/viewcontext.go index 0e23f74ec0..6ef6044107 100644 --- a/packages/vm/viewcontext/viewcontext.go +++ b/packages/vm/viewcontext/viewcontext.go @@ -45,7 +45,7 @@ type ViewContext struct { var _ execution.WaspCallContext = &ViewContext{} func New( - chainID isc.ChainID, + stateReader state.State, processors *processors.Config, log log.Logger, diff --git a/packages/vm/vmimpl/vmrun_test.go b/packages/vm/vmimpl/vmrun_test.go index 8e98bc2037..65b0097286 100644 --- a/packages/vm/vmimpl/vmrun_test.go +++ b/packages/vm/vmimpl/vmrun_test.go @@ -83,7 +83,7 @@ func initChain(chainCreator *cryptolib.KeyPair, store state.Store) *isc.StateAnc func makeOnLedgerRequest( t *testing.T, sender *cryptolib.KeyPair, - chainID isc.ChainID, + msg isc.Message, baseTokens uint64, ) isc.OnLedgerRequest { diff --git a/packages/webapi/controllers/chain/estimategas.go b/packages/webapi/controllers/chain/estimategas.go index 22d2a36de6..9b78cefe9c 100644 --- a/packages/webapi/controllers/chain/estimategas.go +++ b/packages/webapi/controllers/chain/estimategas.go @@ -18,7 +18,7 @@ import ( func (c *Controller) estimateGasOnLedger(e echo.Context) error { panic("TODO") // controllerutils.SetOperation(e, "estimate_gas_onledger") - // ch, chainID, err := controllerutils.ChainFromParams(e, c.chainService) + // ch, err := controllerutils.ChainFromParams(e, c.chainService) // if err != nil { // return err // } diff --git a/packages/webapi/controllers/chain/management.go b/packages/webapi/controllers/chain/management.go index 3435239065..23363fd6cc 100644 --- a/packages/webapi/controllers/chain/management.go +++ b/packages/webapi/controllers/chain/management.go @@ -78,7 +78,7 @@ func (c *Controller) setChainRecord(e echo.Context) error { return apierrors.InvalidPropertyError("body", err) } - record := registry.NewChainRecord(chainID, request.IsActive, []*cryptolib.PublicKey{}) + record := registry.NewChainRecord(request.IsActive, []*cryptolib.PublicKey{}) for _, publicKeyStr := range request.AccessNodes { publicKey, err := cryptolib.PublicKeyFromString(publicKeyStr) diff --git a/packages/webapi/controllers/controllerutils/controllerutils.go b/packages/webapi/controllers/controllerutils/controllerutils.go index 48a45d0c13..9b58b4fdbd 100644 --- a/packages/webapi/controllers/controllerutils/controllerutils.go +++ b/packages/webapi/controllers/controllerutils/controllerutils.go @@ -14,14 +14,14 @@ const ( EchoContextKeyOperation = "operation" ) -func ChainIDFromParams(c echo.Context) (isc.ChainID, error) { +func ChainIDFromParams(c echo.Context) error { chainID, err := params.DecodeChainID(c) if err != nil { return isc.ChainID{}, err } // set chainID to be used by the prometheus metrics - c.Set(EchoContextKeyChainID, chainID) + c.Set(EchoContextKeyChainID) return chainID, nil } diff --git a/packages/webapi/interfaces/interfaces.go b/packages/webapi/interfaces/interfaces.go index f7e2b0bd69..899460e18d 100644 --- a/packages/webapi/interfaces/interfaces.go +++ b/packages/webapi/interfaces/interfaces.go @@ -34,9 +34,9 @@ type APIController interface { } type ChainService interface { - ActivateChain(chainID isc.ChainID) error + ActivateChain() error SetChainRecord(chainRecord *registry.ChainRecord) error - DeactivateChain(chainID isc.ChainID) error + DeactivateChain() error GetAllChainIDs() ([]isc.ChainID, error) GetChain() (chain.Chain, error) GetChainInfo(blockIndexOrTrieRoot string) (*dto.ChainInfo, error) @@ -54,28 +54,28 @@ type EVMService interface { type MetricsService interface { GetNodeMessageMetrics() *dto.NodeMessageMetrics - GetChainMessageMetrics(chainID isc.ChainID) *dto.ChainMessageMetrics - GetChainConsensusPipeMetrics(chainID isc.ChainID) *models.ConsensusPipeMetrics - GetChainConsensusWorkflowMetrics(chainID isc.ChainID) *models.ConsensusWorkflowMetrics + GetChainMessageMetrics() *dto.ChainMessageMetrics + GetChainConsensusPipeMetrics() *models.ConsensusPipeMetrics + GetChainConsensusWorkflowMetrics() *models.ConsensusWorkflowMetrics GetMaxChainConfirmedStateLag() uint32 } var ErrPeerNotFound = errors.New("couldn't find peer") type NodeService interface { - AddAccessNode(chainID isc.ChainID, peer string) error - DeleteAccessNode(chainID isc.ChainID, peer string) error + AddAccessNode(peer string) error + DeleteAccessNode(peer string) error NodeOwnerCertificate() []byte ShutdownNode() L1Params(context.Context) (*parameters.L1Params, error) } type RegistryService interface { - GetChainRecordByChainID(chainID isc.ChainID) (*registry.ChainRecord, error) + GetChainRecordByChainID() (*registry.ChainRecord, error) } type CommitteeService interface { - GetCommitteeInfo(chainID isc.ChainID) (*dto.ChainNodeInfo, error) + GetCommitteeInfo() (*dto.ChainNodeInfo, error) GetPublicKey() *cryptolib.PublicKey } @@ -89,7 +89,7 @@ type PeeringService interface { } type OffLedgerService interface { - EnqueueOffLedgerRequest(chainID isc.ChainID, request []byte) error + EnqueueOffLedgerRequest(request []byte) error ParseRequest(payload []byte) (isc.Request, error) } diff --git a/packages/webapi/params/decoder.go b/packages/webapi/params/decoder.go index c9cbec0274..4bbd6eebcc 100644 --- a/packages/webapi/params/decoder.go +++ b/packages/webapi/params/decoder.go @@ -10,7 +10,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/webapi/apierrors" ) -func DecodeChainID(e echo.Context) (isc.ChainID, error) { +func DecodeChainID(e echo.Context) error { chainID, err := isc.ChainIDFromString(e.Param(ParamChainID)) if err != nil { return isc.ChainID{}, apierrors.InvalidPropertyError(ParamChainID, err) diff --git a/packages/webapi/services/chain.go b/packages/webapi/services/chain.go index 4b70f56582..d4edf86b0a 100644 --- a/packages/webapi/services/chain.go +++ b/packages/webapi/services/chain.go @@ -46,7 +46,7 @@ func NewChainService( } } -func (c *ChainService) ActivateChain(chainID isc.ChainID) error { +func (c *ChainService) ActivateChain() error { _, err := c.chainRecordRegistryProvider.ActivateChainRecord(chainID) if err != nil { return err @@ -55,7 +55,7 @@ func (c *ChainService) ActivateChain(chainID isc.ChainID) error { return c.chainsProvider().Activate(chainID) } -func (c *ChainService) DeactivateChain(chainID isc.ChainID) error { +func (c *ChainService) DeactivateChain() error { _, err := c.chainRecordRegistryProvider.DeactivateChainRecord(chainID) if err != nil { return err diff --git a/packages/webapi/services/committee.go b/packages/webapi/services/committee.go index e05ecce831..20b367cd01 100644 --- a/packages/webapi/services/committee.go +++ b/packages/webapi/services/committee.go @@ -5,7 +5,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/chains" "github.com/iotaledger/wasp/v2/packages/cryptolib" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/peering" "github.com/iotaledger/wasp/v2/packages/registry" "github.com/iotaledger/wasp/v2/packages/tcrypto" @@ -34,7 +33,7 @@ func (c *CommitteeService) GetPublicKey() *cryptolib.PublicKey { return c.networkProvider.Self().PubKey() } -func (c *CommitteeService) GetCommitteeInfo(chainID isc.ChainID) (*dto.ChainNodeInfo, error) { +func (c *CommitteeService) GetCommitteeInfo() (*dto.ChainNodeInfo, error) { chain, err := c.chainsProvider().Get(chainID) if err != nil { return nil, err diff --git a/packages/webapi/services/evm.go b/packages/webapi/services/evm.go index 171a3c4ba0..c0a0461158 100644 --- a/packages/webapi/services/evm.go +++ b/packages/webapi/services/evm.go @@ -124,7 +124,7 @@ func (e *EVMService) HandleJSONRPC(request *http.Request, response *echo.Respons return nil } -func (e *EVMService) getWebsocketContext(ctx context.Context, chainID isc.ChainID) *websocketContext { +func (e *EVMService) getWebsocketContext(ctx context.Context) *websocketContext { e.websocketContextMutex.Lock() defer e.websocketContextMutex.Unlock() diff --git a/packages/webapi/services/metrics.go b/packages/webapi/services/metrics.go index 9f8f192697..09b668c074 100644 --- a/packages/webapi/services/metrics.go +++ b/packages/webapi/services/metrics.go @@ -2,7 +2,6 @@ package services import ( "github.com/iotaledger/wasp/v2/packages/chains" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/metrics" "github.com/iotaledger/wasp/v2/packages/webapi/dto" "github.com/iotaledger/wasp/v2/packages/webapi/interfaces" @@ -30,7 +29,7 @@ func (c *MetricsService) GetNodeMessageMetrics() *dto.NodeMessageMetrics { } } -func (c *MetricsService) GetChainMessageMetrics(chainID isc.ChainID) *dto.ChainMessageMetrics { +func (c *MetricsService) GetChainMessageMetrics() *dto.ChainMessageMetrics { chain, err := c.chainProvider().Get(chainID) if err != nil { return nil @@ -45,7 +44,7 @@ func (c *MetricsService) GetChainMessageMetrics(chainID isc.ChainID) *dto.ChainM } } -func (c *MetricsService) GetChainConsensusWorkflowMetrics(chainID isc.ChainID) *models.ConsensusWorkflowMetrics { +func (c *MetricsService) GetChainConsensusWorkflowMetrics() *models.ConsensusWorkflowMetrics { chain, err := c.chainProvider().Get(chainID) if err != nil { return nil @@ -59,7 +58,7 @@ func (c *MetricsService) GetChainConsensusWorkflowMetrics(chainID isc.ChainID) * return models.MapConsensusWorkflowStatus(metrics) } -func (c *MetricsService) GetChainConsensusPipeMetrics(chainID isc.ChainID) *models.ConsensusPipeMetrics { +func (c *MetricsService) GetChainConsensusPipeMetrics() *models.ConsensusPipeMetrics { chain, err := c.chainProvider().Get(chainID) if err != nil { return nil diff --git a/packages/webapi/services/node.go b/packages/webapi/services/node.go index 51bd37e9e1..becc73faad 100644 --- a/packages/webapi/services/node.go +++ b/packages/webapi/services/node.go @@ -6,7 +6,6 @@ import ( "github.com/iotaledger/hive.go/app/shutdown" "github.com/iotaledger/wasp/v2/packages/chains" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/parameters" "github.com/iotaledger/wasp/v2/packages/peering" "github.com/iotaledger/wasp/v2/packages/registry" @@ -41,13 +40,13 @@ func NewNodeService( } } -func (n *NodeService) AddAccessNode(chainID isc.ChainID, peerPubKeyOrName string) error { +func (n *NodeService) AddAccessNode(peerPubKeyOrName string) error { peers, err := n.trustedNetworkManager.TrustedPeersByPubKeyOrName([]string{peerPubKeyOrName}) if err != nil { return err } - if _, err = n.chainRecordRegistryProvider.UpdateChainRecord(chainID, func(rec *registry.ChainRecord) bool { + if _, err = n.chainRecordRegistryProvider.UpdateChainRecord(func(rec *registry.ChainRecord) bool { return rec.AddAccessNode(peers[0].PubKey()) }); err != nil { return errors.New("error saving chain record") @@ -56,13 +55,13 @@ func (n *NodeService) AddAccessNode(chainID isc.ChainID, peerPubKeyOrName string return nil } -func (n *NodeService) DeleteAccessNode(chainID isc.ChainID, peerPubKeyOrName string) error { +func (n *NodeService) DeleteAccessNode(peerPubKeyOrName string) error { peers, err := n.trustedNetworkManager.TrustedPeersByPubKeyOrName([]string{peerPubKeyOrName}) if err != nil { return err } - if _, err := n.chainRecordRegistryProvider.UpdateChainRecord(chainID, func(rec *registry.ChainRecord) bool { + if _, err := n.chainRecordRegistryProvider.UpdateChainRecord(func(rec *registry.ChainRecord) bool { return rec.RemoveAccessNode(peers[0].PubKey()) }); err != nil { return errors.New("error saving chain record") diff --git a/packages/webapi/services/offledger.go b/packages/webapi/services/offledger.go index 2c3d6b6974..e119be4d28 100644 --- a/packages/webapi/services/offledger.go +++ b/packages/webapi/services/offledger.go @@ -38,7 +38,7 @@ func (c *OffLedgerService) ParseRequest(binaryRequest []byte) (isc.Request, erro return request, nil } -func (c *OffLedgerService) EnqueueOffLedgerRequest(chainID isc.ChainID, binaryRequest []byte) error { +func (c *OffLedgerService) EnqueueOffLedgerRequest(binaryRequest []byte) error { request, err := c.ParseRequest(binaryRequest) if err != nil { return err diff --git a/packages/webapi/services/registry.go b/packages/webapi/services/registry.go index 847f57cc6a..bef593a481 100644 --- a/packages/webapi/services/registry.go +++ b/packages/webapi/services/registry.go @@ -2,7 +2,6 @@ package services import ( "github.com/iotaledger/wasp/v2/packages/chains" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/registry" "github.com/iotaledger/wasp/v2/packages/webapi/interfaces" ) @@ -19,6 +18,6 @@ func NewRegistryService(chainsProvider chains.Provider, chainRecordRegistryProvi } } -func (c *RegistryService) GetChainRecordByChainID(chainID isc.ChainID) (*registry.ChainRecord, error) { +func (c *RegistryService) GetChainRecordByChainID() (*registry.ChainRecord, error) { return c.chainRecordRegistryProvider.ChainRecord(chainID) } diff --git a/packages/webapi/websocket/subscriptionvalidator.go b/packages/webapi/websocket/subscriptionvalidator.go index 34148d96f7..7441b5c9aa 100644 --- a/packages/webapi/websocket/subscriptionvalidator.go +++ b/packages/webapi/websocket/subscriptionvalidator.go @@ -29,18 +29,18 @@ func (p *SubscriptionValidator) hasAnyoneSubscribedToAllChains() bool { return p.subscriptionManager.TopicHasSubscribers("chains") } -func (p *SubscriptionValidator) hasClientSubscribedToSingleChain(client *websockethub.Client, chainID string) bool { - return p.subscriptionManager.ClientSubscribedToTopic(client.ID(), fmt.Sprintf("chains/%s", chainID)) +func (p *SubscriptionValidator) hasClientSubscribedToSingleChain(client *websockethub.Client) bool { + return p.subscriptionManager.ClientSubscribedToTopic(client.ID(), fmt.Sprintf("chains/%s")) } func (p *SubscriptionValidator) hasAnyoneSubscribedToSingleChain(chainID string) bool { - return p.subscriptionManager.TopicHasSubscribers(fmt.Sprintf("chains/%s", chainID)) + return p.subscriptionManager.TopicHasSubscribers(fmt.Sprintf("chains/%s")) } // shouldProcessEvent validates if any subscriber has subscribed to a certain chainID and messageType. // it returns false if no one has subscribed to those parameters // this usually means, that there is no need to process a certain incoming event. -func (p *SubscriptionValidator) shouldProcessEvent(chainID string, messageType publisher.ISCEventType) bool { +func (p *SubscriptionValidator) shouldProcessEvent(messageType publisher.ISCEventType) bool { if !p.messageTypes[messageType] { return false } @@ -60,13 +60,13 @@ func (p *SubscriptionValidator) shouldProcessEvent(chainID string, messageType p // isClientAllowed validates if a certain subscriber has subscribed to a certain chainID and messageType. // it returns false if the client has not subscribed to those parameters // this usually means, that there is no need to process a certain outgoing event. -func (p *SubscriptionValidator) isClientAllowed(client *websockethub.Client, chainID string, messageType publisher.ISCEventType) bool { +func (p *SubscriptionValidator) isClientAllowed(client *websockethub.Client, messageType publisher.ISCEventType) bool { if !p.messageTypes[messageType] { return false } // Check a client has either subscribed to all chains [chains], or the supplied single chain id [chains/] - if !p.hasClientSubscribedToAllChains(client) && !p.hasClientSubscribedToSingleChain(client, chainID) { + if !p.hasClientSubscribedToAllChains(client) && !p.hasClientSubscribedToSingleChain(client) { return false } diff --git a/tools/cluster/cluster.go b/tools/cluster/cluster.go index 89f9c4368e..b9b04b08ee 100644 --- a/tools/cluster/cluster.go +++ b/tools/cluster/cluster.go @@ -360,7 +360,7 @@ func (clu *Cluster) DeployChain(allPeers, committeeNodes []int, quorum uint16, s } // activate chain on nodes - err = apilib.ActivateChainOnNodes(clu.WaspClientFromHostName, chain.CommitteeAPIHosts(), chainID) + err = apilib.ActivateChainOnNodes(clu.WaspClientFromHostName, chain.CommitteeAPIHosts()) if err != nil { clu.t.Fatalf("activating chain %s.. FAILED: %v\n", chainID.String(), err) } diff --git a/tools/cluster/tests/deploy_test.go b/tools/cluster/tests/deploy_test.go index 2978e28c5e..fe0e833bfe 100644 --- a/tools/cluster/tests/deploy_test.go +++ b/tools/cluster/tests/deploy_test.go @@ -12,7 +12,7 @@ import ( // executed in cluster_test.go func (e *ChainEnv) testDeployChain(t *testing.T) { chainID, chainAdmin := e.getChainInfo() - require.EqualValues(t, chainID, e.Chain.ChainID) + require.EqualValues(t, e.Chain.ChainID) require.EqualValues(t, chainAdmin, isc.NewAddressAgentID(e.Chain.OriginatorAddress())) t.Logf("--- chainID: %s", chainID.String()) t.Logf("--- chainAdmin: %s", chainAdmin.String()) diff --git a/tools/cluster/tests/missing_requests_test.go b/tools/cluster/tests/missing_requests_test.go index 84d8626d61..5917ed6bb4 100644 --- a/tools/cluster/tests/missing_requests_test.go +++ b/tools/cluster/tests/missing_requests_test.go @@ -38,7 +38,7 @@ func TestMissingRequests(t *testing.T) { // TODO: Validate offleder logic // send off-ledger request to all nodes except #3 - req := isc.NewOffLedgerRequest(chainID, inccounter.FuncIncCounter.Message(nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(userWallet) + req := isc.NewOffLedgerRequest(inccounter.FuncIncCounter.Message(nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(userWallet) _, err = clu.WaspClient(0).RequestsAPI.OffLedger(context.Background()).OffLedgerRequest(apiclient.OffLedgerRequest{ Request: cryptolib.EncodeHex(req.Bytes()), @@ -47,7 +47,7 @@ func TestMissingRequests(t *testing.T) { //------ // send a dummy request to node #3, so that it proposes a batch and the consensus hang is broken - req2 := isc.NewOffLedgerRequest(chainID, isc.NewMessageFromNames("foo", "bar"), 1, gas.LimitsDefault.MaxGasPerRequest).Sign(userWallet) + req2 := isc.NewOffLedgerRequest(isc.NewMessageFromNames("foo", "bar"), 1, gas.LimitsDefault.MaxGasPerRequest).Sign(userWallet) _, err = clu.WaspClient(0).RequestsAPI.OffLedger(context.Background()).OffLedgerRequest(apiclient.OffLedgerRequest{ Request: cryptolib.EncodeHex(req2.Bytes()), diff --git a/tools/cluster/tests/nodeconn_test.go b/tools/cluster/tests/nodeconn_test.go index 80b75d47a0..74449ea5cc 100644 --- a/tools/cluster/tests/nodeconn_test.go +++ b/tools/cluster/tests/nodeconn_test.go @@ -126,7 +126,7 @@ func TestNodeConn(t *testing.T) { // require.NoError(t, err) // ctxPublish, cancelPublish := context.WithCancel(context.Background()) - // nc.PublishTX(ctxPublish, chainID, tx, func(tx *iotago.Transaction, confirmed bool) { + // nc.PublishTX(ctxPublish, tx, func(tx *iotago.Transaction, confirmed bool) { // require.True(t, confirmed) // cancelPublish() // }) diff --git a/tools/cluster/tests/util.go b/tools/cluster/tests/util.go index 6a6b93ea49..ed4d8d5a38 100644 --- a/tools/cluster/tests/util.go +++ b/tools/cluster/tests/util.go @@ -104,7 +104,7 @@ func (e *ChainEnv) checkBalanceOnChain(agentID isc.AgentID, coinType coin.Type, require.EqualValues(e.t, expected, actual) } -func (e *ChainEnv) getChainInfo() (isc.ChainID, isc.AgentID) { +func (e *ChainEnv) getChainInfo() isc.AgentID { chainInfo, _, err := e.Chain.Cluster.WaspClient(0).ChainsAPI. GetChainInfo(context.Background()). Execute() diff --git a/tools/cluster/tests/validator_fees_test.go b/tools/cluster/tests/validator_fees_test.go index 2a027535e7..7f3316d3f4 100644 --- a/tools/cluster/tests/validator_fees_test.go +++ b/tools/cluster/tests/validator_fees_test.go @@ -63,14 +63,14 @@ func TestValidatorFees(t *testing.T) { // assert each validator has received fees userWallet, _, err := chEnv.Clu.NewKeyPairWithFunds() require.NoError(t, err) - scClient := chainclient.New(clu.L1Client(), clu.WaspClient(0), chainID, clu.Config.ISCPackageID(), userWallet) + scClient := chainclient.New(clu.L1Client(), clu.WaspClient(0), clu.Config.ISCPackageID(), userWallet) for i := 0; i < 20; i++ { reqTx, err := scClient.PostRequest(context.Background(), accounts.FuncDeposit.Message(), chainclient.PostRequestParams{ Transfer: isc.NewAssets(iotaclient.DefaultGasBudget + 100), GasBudget: iotaclient.DefaultGasBudget, }) require.NoError(t, err) - _, err = chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), chainID, reqTx, false, 30*time.Second) + _, err = chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), reqTx, false, 30*time.Second) require.NoError(t, err) } for _, validatorKp := range validatorKps { diff --git a/tools/cluster/tests/wasp-cli_rotation_test.go b/tools/cluster/tests/wasp-cli_rotation_test.go index 9b271b65a0..8e26cfa914 100644 --- a/tools/cluster/tests/wasp-cli_rotation_test.go +++ b/tools/cluster/tests/wasp-cli_rotation_test.go @@ -120,7 +120,7 @@ func testWaspCLIExternalRotation(t *testing.T, addAccessNode func(*WaspCLITest, } // activate the chain on the new nodes - w2.MustRun("chain", "add", "chain1", chainID) + w2.MustRun("chain", "add", "chain1") for _, idx := range w2.Cluster.AllNodes() { w2.MustRun("chain", "activate", fmt.Sprintf("--node=%d", idx)) } diff --git a/tools/wasp-cli/chain/accounts.go b/tools/wasp-cli/chain/accounts.go index f2c1decfc0..8ae5db001b 100644 --- a/tools/wasp-cli/chain/accounts.go +++ b/tools/wasp-cli/chain/accounts.go @@ -154,7 +154,7 @@ func initDepositCmd() *cobra.Command { allowance.SetBaseTokens(allowance.BaseTokens()) res = util.WithSCTransaction(ctx, client, func() (*iotajsonrpc.IotaTransactionBlockResponse, error) { - return cliclients.ChainClient(client, chainID).PostRequest(ctx, + return cliclients.ChainClient(client).PostRequest(ctx, accounts.FuncDeposit.Message(), chainclient.PostRequestParams{ Transfer: tokens, @@ -172,7 +172,7 @@ func initDepositCmd() *cobra.Command { allowance.SetBaseTokens(allowance.BaseTokens()) res = util.WithSCTransaction(ctx, client, func() (*iotajsonrpc.IotaTransactionBlockResponse, error) { - return cliclients.ChainClient(client, chainID).PostRequest( + return cliclients.ChainClient(client).PostRequest( ctx, accounts.FuncTransferAllowanceTo.Message(agentID), chainclient.PostRequestParams{ diff --git a/tools/wasp-cli/chain/activate.go b/tools/wasp-cli/chain/activate.go index 15fb12b8b4..86fbca0f3c 100644 --- a/tools/wasp-cli/chain/activate.go +++ b/tools/wasp-cli/chain/activate.go @@ -7,7 +7,6 @@ import ( "github.com/spf13/cobra" "github.com/iotaledger/wasp/v2/clients/apiclient" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/tools/wasp-cli/cli/cliclients" "github.com/iotaledger/wasp/v2/tools/wasp-cli/cli/config" "github.com/iotaledger/wasp/v2/tools/wasp-cli/log" @@ -26,7 +25,7 @@ func initActivateCmd() *cobra.Command { chainName = defaultChainFallback(chainName) chainID := config.GetChain(chainName) ctx := context.Background() - activateChain(ctx, node, chainName, chainID) + activateChain(ctx, node, chainName) }, } @@ -36,7 +35,7 @@ func initActivateCmd() *cobra.Command { return cmd } -func activateChain(ctx context.Context, node string, chainName string, chainID isc.ChainID) { +func activateChain(ctx context.Context, node string, chainName string) { client := cliclients.WaspClientWithVersionCheck(ctx, node) r, httpStatus, err := client.ChainsAPI.GetChainInfo(ctx).Execute() //nolint:bodyclose // false positive @@ -60,7 +59,7 @@ func activateChain(ctx context.Context, node string, chainName string, chainID i log.Check(err) } - log.Printf("Chain: %v (%v)\nActivated\n", chainID, chainName) + log.Printf("Chain: %v (%v)\nActivated\n", chainName) } func initDeactivateCmd() *cobra.Command { diff --git a/tools/wasp-cli/chain/deploy.go b/tools/wasp-cli/chain/deploy.go index f8bece8295..580dbd1711 100644 --- a/tools/wasp-cli/chain/deploy.go +++ b/tools/wasp-cli/chain/deploy.go @@ -215,7 +215,7 @@ func initDeployCmd() *cobra.Command { chainID := finalizeChainDeployment(ctx, node, *result, stateMetadata) config.AddChain(chainName, chainID.String()) - activateChain(ctx, node, chainName, chainID) + activateChain(ctx, node, chainName) }, } diff --git a/tools/wasp-cli/chain/postrequest.go b/tools/wasp-cli/chain/postrequest.go index 408d162a48..38a5aafc14 100644 --- a/tools/wasp-cli/chain/postrequest.go +++ b/tools/wasp-cli/chain/postrequest.go @@ -19,7 +19,7 @@ import ( func postRequest(ctx context.Context, client *apiclient.APIClient, chain string, msg isc.Message, params chainclient.PostRequestParams, offLedger bool) { chainID := config.GetChain(chain) - chainClient := cliclients.ChainClient(client, chainID) + chainClient := cliclients.ChainClient(client) if offLedger { util.WithOffLedgerRequest(ctx, client, func() (isc.OffLedgerRequest, error) { diff --git a/tools/wasp-cli/cli/cliclients/clients.go b/tools/wasp-cli/cli/cliclients/clients.go index 9a1639e905..ba785ed428 100644 --- a/tools/wasp-cli/cli/cliclients/clients.go +++ b/tools/wasp-cli/cli/cliclients/clients.go @@ -11,7 +11,6 @@ import ( "github.com/iotaledger/wasp/v2/clients/chainclient" "github.com/iotaledger/wasp/v2/clients/iota-go/iotaclient" "github.com/iotaledger/wasp/v2/components/app" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/tools/wasp-cli/cli/config" "github.com/iotaledger/wasp/v2/tools/wasp-cli/cli/wallet" "github.com/iotaledger/wasp/v2/tools/wasp-cli/log" @@ -65,7 +64,7 @@ func L1Client() clients.L1Client { }, iotaclient.WaitForEffectsEnabled) } -func ChainClient(waspClient *apiclient.APIClient, chainID isc.ChainID) *chainclient.Client { +func ChainClient(waspClient *apiclient.APIClient) *chainclient.Client { iscPackageID := config.GetPackageID() return chainclient.New( diff --git a/tools/wasp-cli/cli/config/config.go b/tools/wasp-cli/cli/config/config.go index 9597998c1f..45a372035d 100644 --- a/tools/wasp-cli/cli/config/config.go +++ b/tools/wasp-cli/cli/config/config.go @@ -156,8 +156,8 @@ func AddWaspNode(name, apiURL string) { Set("wasp."+name, apiURL) } -func AddChain(name, chainID string) { - Set("chains."+name, chainID) +func AddChain(name) { + Set("chains." + name) } func WriteConfig() error { From 65eea71790b434a5f70ba2a38e1e16ebead02737 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Fri, 8 Aug 2025 04:20:05 -0700 Subject: [PATCH 02/27] Progress on multi-chain cleanup --- clients/apiclient/api_chains.go | 3 +- clients/apiclient/api_corecontracts.go | 1 - clients/chainclient/chainclient.go | 2 +- clients/multiclient/activate.go | 3 +- clients/multiclient/chain_record.go | 2 +- packages/apilib/deploychain.go | 6 +- packages/chain/chain.go | 2 +- packages/chain/chainmanager/chain_manager.go | 2 +- .../chainmanager/var_access_nodes_state.go | 10 ++- packages/chain/cmtlog/cmt_log.go | 12 ++-- packages/chain/cmtlog/cmt_log_test.go | 2 +- packages/chain/cons/cons.go | 2 +- packages/chain/cons/gr/gr.go | 2 +- packages/chain/mempool/mempool.go | 4 +- packages/chain/mempool/offledger_pool_test.go | 21 +++---- packages/chain/node.go | 5 +- packages/chain/node_test.go | 8 +-- .../statemanager/gpa/state_manager_gpa.go | 3 - .../gpa/state_manager_gpa_cob_test.go | 2 +- packages/chain/statemanager/gpa/test_env.go | 1 - .../chain/statemanager/gpa/utils/block_wal.go | 3 +- .../gpa/utils/block_wal_rapid_test.go | 10 +-- .../statemanager/gpa/utils/block_wal_test.go | 35 +++++------ .../snapshots/snapshot_manager.go | 2 +- .../snapshots/snapshot_manager_test.go | 18 +++--- packages/chain/statemanager/state_manager.go | 4 +- packages/chains/chains.go | 1 + packages/database/manager.go | 8 +-- packages/isc/chainid.go | 2 +- packages/isc/chainid_test.go | 6 +- packages/isc/request.go | 1 - packages/isc/request_evmtx.go | 16 ++--- packages/isc/request_offledger.go | 8 --- packages/isc/request_offledger_test.go | 5 +- packages/isc/request_test.go | 20 +++--- packages/nodeconn/nodeconn.go | 62 ++++++------------- 36 files changed, 119 insertions(+), 175 deletions(-) diff --git a/clients/apiclient/api_chains.go b/clients/apiclient/api_chains.go index 41d7012d31..c737c2cdeb 100644 --- a/clients/apiclient/api_chains.go +++ b/clients/apiclient/api_chains.go @@ -39,7 +39,7 @@ ActivateChain Activate a chain @param chainID ChainID (Hex Address) @return ApiActivateChainRequest */ -func (a *ChainsAPIService) ActivateChain(ctx context.Context) ApiActivateChainRequest { +func (a *ChainsAPIService) ActivateChain(ctx context.Context, chainID string) ApiActivateChainRequest { return ApiActivateChainRequest{ ApiService: a, ctx: ctx, @@ -1761,7 +1761,6 @@ func (a *ChainsAPIService) SetChainRecord(ctx context.Context) ApiSetChainRecord return ApiSetChainRecordRequest{ ApiService: a, ctx: ctx, - chainID: chainID, } } diff --git a/clients/apiclient/api_corecontracts.go b/clients/apiclient/api_corecontracts.go index bac2343730..f55495aac1 100644 --- a/clients/apiclient/api_corecontracts.go +++ b/clients/apiclient/api_corecontracts.go @@ -1872,7 +1872,6 @@ func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormat(ctx context.Contex return ApiErrorsGetErrorMessageFormatRequest{ ApiService: a, ctx: ctx, - chainID: chainID, contractHname: contractHname, errorID: errorID, } diff --git a/clients/chainclient/chainclient.go b/clients/chainclient/chainclient.go index 88d031349d..b48214aeb6 100644 --- a/clients/chainclient/chainclient.go +++ b/clients/chainclient/chainclient.go @@ -33,7 +33,7 @@ type Client struct { func New( l1Client clients.L1Client, waspClient *apiclient.APIClient, - + chainID isc.ChainID, iscPackageID iotago.PackageID, keyPair cryptolib.Signer, ) *Client { diff --git a/clients/multiclient/activate.go b/clients/multiclient/activate.go index b8b3fdf265..2cf74d75eb 100644 --- a/clients/multiclient/activate.go +++ b/clients/multiclient/activate.go @@ -5,10 +5,11 @@ import ( "context" "github.com/iotaledger/wasp/v2/clients/apiclient" + "github.com/iotaledger/wasp/v2/packages/isc" ) // ActivateChain sends a request to activate a chain in all wasp nodes -func (m *MultiClient) ActivateChain() error { +func (m *MultiClient) ActivateChain(chainID isc.ChainID) error { return m.Do(func(i int, w *apiclient.APIClient) error { _, err := w.ChainsAPI.ActivateChain(context.Background(), chainID.String()).Execute() return err diff --git a/clients/multiclient/chain_record.go b/clients/multiclient/chain_record.go index d498d896dc..f9f250839d 100644 --- a/clients/multiclient/chain_record.go +++ b/clients/multiclient/chain_record.go @@ -16,7 +16,7 @@ func (m *MultiClient) PutChainRecord(bd *registry.ChainRecord) error { accessNodes[k] = v.String() } - _, err := w.ChainsAPI.SetChainRecord(context.Background(), bd.ChainID().String()).ChainRecord(apiclient.ChainRecord{ + _, err := w.ChainsAPI.SetChainRecord(context.Background()).ChainRecord(apiclient.ChainRecord{ IsActive: true, AccessNodes: accessNodes, }).Execute() diff --git a/packages/apilib/deploychain.go b/packages/apilib/deploychain.go index 336c619a69..2d27876ccf 100644 --- a/packages/apilib/deploychain.go +++ b/packages/apilib/deploychain.go @@ -32,7 +32,7 @@ type CreateChainParams struct { } // DeployChain creates a new chain on specified committee address -func DeployChain(ctx context.Context, par CreateChainParams, anchorOwner *cryptolib.Address) error { +func DeployChain(ctx context.Context, par CreateChainParams, anchorOwner *cryptolib.Address) (isc.ChainID, error) { var err error textout := io.Discard if par.Textout != nil { @@ -71,8 +71,8 @@ func DeployChain(ctx context.Context, par CreateChainParams, anchorOwner *crypto } // ActivateChainOnNodes puts chain records into nodes and activates its -func ActivateChainOnNodes(clientResolver multiclient.ClientResolver, apiHosts []string) error { +func ActivateChainOnNodes(clientResolver multiclient.ClientResolver, apiHosts []string, chainID isc.ChainID) error { nodes := multiclient.New(clientResolver, apiHosts) // ------------ put chain records to hosts - return nodes.PutChainRecord(registry.NewChainRecord(true, []*cryptolib.PublicKey{})) + return nodes.PutChainRecord(registry.NewChainRecord(chainID, true, []*cryptolib.PublicKey{})) } diff --git a/packages/chain/chain.go b/packages/chain/chain.go index efd40c4405..e78a3e61f0 100644 --- a/packages/chain/chain.go +++ b/packages/chain/chain.go @@ -32,7 +32,7 @@ type ChainNodeConn interface { // detached. AttachChain( ctx context.Context, - + chainID isc.ChainID, recvRequest RequestHandler, recvAnchor AnchorHandler, onChainConnect func(), diff --git a/packages/chain/chainmanager/chain_manager.go b/packages/chain/chainmanager/chain_manager.go index 5d0409ea4a..734b3ba997 100644 --- a/packages/chain/chainmanager/chain_manager.go +++ b/packages/chain/chainmanager/chain_manager.go @@ -228,7 +228,7 @@ var ( func New( me gpa.NodeID, - + chainID isc.ChainID, chainStore state.Store, consensusStateRegistry cmtlog.ConsensusStateRegistry, dkShareRegistryProvider registry.DKShareRegistryProvider, diff --git a/packages/chain/chainmanager/var_access_nodes_state.go b/packages/chain/chainmanager/var_access_nodes_state.go index ccfccc2cbc..1e5e865c90 100644 --- a/packages/chain/chainmanager/var_access_nodes_state.go +++ b/packages/chain/chainmanager/var_access_nodes_state.go @@ -24,16 +24,14 @@ type VarAccessNodeState interface { } type varAccessNodeStateImpl struct { - chainID isc.ChainID - tipAO *isc.StateAnchor - log log.Logger + tipAO *isc.StateAnchor + log log.Logger } func NewVarAccessNodeState(log log.Logger) VarAccessNodeState { return &varAccessNodeStateImpl{ - chainID: chainID, - tipAO: nil, - log: log, + tipAO: nil, + log: log, } } diff --git a/packages/chain/cmtlog/cmt_log.go b/packages/chain/cmtlog/cmt_log.go index 396ce67858..57df27c2ad 100644 --- a/packages/chain/cmtlog/cmt_log.go +++ b/packages/chain/cmtlog/cmt_log.go @@ -45,8 +45,8 @@ type State struct { // ConsensusStateRegistry is the interface used to store and recover the existing persistent state. // To be implemented by the registry. type ConsensusStateRegistry interface { - Get(committeeAddress *cryptolib.Address) (*State, error) // Can return ErrCmtLogStateNotFound. - Set(committeeAddress *cryptolib.Address, state *State) error + Get(chainID isc.ChainID, committeeAddress *cryptolib.Address) (*State, error) // Can return ErrCmtLogStateNotFound. + Set(chainID isc.ChainID, committeeAddress *cryptolib.Address, state *State) error } var ErrCmtLogStateNotFound = errors.New("errCmtLogStateNotFound") @@ -60,7 +60,6 @@ type Output = map[LogIndex]*isc.StateAnchor // Protocol implementation. type cmtLogImpl struct { - chainID isc.ChainID // Chain, for which this log is maintained by this committee. cmtAddr *cryptolib.Address // Address of the committee running this chain. consensusStateRegistry ConsensusStateRegistry // Persistent storage. varLogIndex VarLogIndex // Calculates the current log index. @@ -83,7 +82,7 @@ var _ gpa.GPA = &cmtLogImpl{} // > ... func New( me gpa.NodeID, - + chainID isc.ChainID, dkShare tcrypto.DKShare, consensusStateRegistry ConsensusStateRegistry, nodeIDFromPubKey func(pubKey *cryptolib.PublicKey) gpa.NodeID, @@ -96,7 +95,7 @@ func New( // // Load the last LogIndex we were working on. var prevLI LogIndex - state, err := consensusStateRegistry.Get(cmtAddr) + state, err := consensusStateRegistry.Get(chainID, cmtAddr) if err != nil { if !errors.Is(err, ErrCmtLogStateNotFound) { return nil, fmt.Errorf("cannot load cmtLogState for %v: %w", cmtAddr, err) @@ -129,7 +128,6 @@ func New( // // Create it. cl := &cmtLogImpl{ - chainID: chainID, cmtAddr: cmtAddr, consensusStateRegistry: consensusStateRegistry, varLogIndex: nil, // Set bellow. @@ -141,7 +139,7 @@ func New( log: log, } persistLIFunc := func(li LogIndex) { - if err := consensusStateRegistry.Set(cmtAddr, &State{LogIndex: li}); err != nil { + if err := consensusStateRegistry.Set(chainID, cmtAddr, &State{LogIndex: li}); err != nil { // Nothing to do, if we cannot persist this. panic(fmt.Errorf("cannot persist the cmtLog state: %w", err)) } diff --git a/packages/chain/cmtlog/cmt_log_test.go b/packages/chain/cmtlog/cmt_log_test.go index 09ceb4e5c6..e03c32f469 100644 --- a/packages/chain/cmtlog/cmt_log_test.go +++ b/packages/chain/cmtlog/cmt_log_test.go @@ -61,7 +61,7 @@ func testCmtLogBasic(t *testing.T, n, f int) { dkShare, err := committeeKeyShares[i].LoadDKShare(committeeAddress) require.NoError(t, err) consensusStateRegistry := testutil.NewConsensusStateRegistry() // Empty store in this case. - cmtLogInst, err := cmtlog.New(gpaNodeIDs[i], dkShare, consensusStateRegistry, gpa.NodeIDFromPublicKey, true, -1, nil, log.NewChildLogger(fmt.Sprintf("N%v", i))) + cmtLogInst, err := cmtlog.New(gpaNodeIDs[i], chainID, dkShare, consensusStateRegistry, gpa.NodeIDFromPublicKey, true, -1, nil, log.NewChildLogger(fmt.Sprintf("N%v", i))) require.NoError(t, err) gpaNodes[gpaNodeIDs[i]] = cmtLogInst.AsGPA() } diff --git a/packages/chain/cons/cons.go b/packages/chain/cons/cons.go index d6bed65084..eb339d88f7 100644 --- a/packages/chain/cons/cons.go +++ b/packages/chain/cons/cons.go @@ -143,7 +143,7 @@ var ( ) func New( //nolint:funlen - + chainID isc.ChainID, chainStore state.Store, me gpa.NodeID, mySK *cryptolib.PrivateKey, diff --git a/packages/chain/cons/gr/gr.go b/packages/chain/cons/gr/gr.go index 0089c37646..3fc0455277 100644 --- a/packages/chain/cons/gr/gr.go +++ b/packages/chain/cons/gr/gr.go @@ -157,7 +157,7 @@ type ConsGr struct { func New( ctx context.Context, - + chainID isc.ChainID, chainStore state.Store, dkShare tcrypto.DKShare, logIndex *cmtlog.LogIndex, diff --git a/packages/chain/mempool/mempool.go b/packages/chain/mempool/mempool.go index 2758bd4175..50c4eb6691 100644 --- a/packages/chain/mempool/mempool.go +++ b/packages/chain/mempool/mempool.go @@ -212,7 +212,7 @@ type reqTrackNewChainHead struct { func New( ctx context.Context, - + chainID isc.ChainID, nodeIdentity *cryptolib.KeyPair, net peering.NetworkProvider, log log.Logger, @@ -833,7 +833,7 @@ func (mpi *mempoolImpl) handleTrackNewChainHead(req *reqTrackNewChainHead) { panic(fmt.Errorf("cannot extract receipts from block: %w", err)) } mpi.metrics.IncBlocksPerChain() - mpi.listener.BlockApplied(mpi.chainID, block, mpi.chainHeadState) + mpi.listener.BlockApplied(block, mpi.chainHeadState) for _, receipt := range blockReceipts { mpi.metrics.IncRequestsProcessed() mpi.tryRemoveRequest(receipt.Request) diff --git a/packages/chain/mempool/offledger_pool_test.go b/packages/chain/mempool/offledger_pool_test.go index d6ae600f57..b549e46f79 100644 --- a/packages/chain/mempool/offledger_pool_test.go +++ b/packages/chain/mempool/offledger_pool_test.go @@ -12,7 +12,6 @@ import ( consGR "github.com/iotaledger/wasp/v2/packages/chain/cons/gr" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil" "github.com/iotaledger/wasp/v2/packages/testutil/testkey" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" @@ -26,10 +25,10 @@ func TestOffledgerMempoolAccountNonce(t *testing.T) { kp, addr := testkey.GenKeyAddr() agentID := isc.NewAddressAgentID(addr) - req0 := testutil.DummyOffledgerRequestForAccount(isctest.RandomChainID(), 0, kp) - req1 := testutil.DummyOffledgerRequestForAccount(isctest.RandomChainID(), 1, kp) - req2 := testutil.DummyOffledgerRequestForAccount(isctest.RandomChainID(), 2, kp) - req2new := testutil.DummyOffledgerRequestForAccount(isctest.RandomChainID(), 2, kp) + req0 := testutil.DummyOffledgerRequestForAccount(0, kp) + req1 := testutil.DummyOffledgerRequestForAccount(1, kp) + req2 := testutil.DummyOffledgerRequestForAccount(2, kp) + req2new := testutil.DummyOffledgerRequestForAccount(2, kp) pool.Add(req0) pool.Add(req1) pool.Add(req1) // try to add the same request many times, old will be replaced. @@ -68,9 +67,9 @@ func TestOffledgerMempoolLimit(t *testing.T) { pool := NewOffledgerPool(poolSizeLimit, poolSizeLimit, waitReq, func(int) {}, func(time.Duration) {}, testlogger.NewSilentLogger("", true)) // create requests with different gas prices - req0 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(1)) - req1 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(2)) - req2 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(3)) + req0 := testutil.DummyEVMRequest(big.NewInt(1)) + req1 := testutil.DummyEVMRequest(big.NewInt(2)) + req2 := testutil.DummyEVMRequest(big.NewInt(3)) pool.Add(req0) pool.Add(req1) pool.Add(req2) @@ -91,17 +90,17 @@ func TestOffledgerMempoolLimit(t *testing.T) { assertPoolSize() // add a request with high - req3 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(3)) + req3 := testutil.DummyEVMRequest(big.NewInt(3)) pool.Add(req3) assertPoolSize() contains(req1, req2, req3) // assert req3 was added and req0 was removed - req4 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(1)) + req4 := testutil.DummyEVMRequest(big.NewInt(1)) pool.Add(req4) assertPoolSize() contains(req1, req2, req3) // assert req4 is not added - req5 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(4)) + req5 := testutil.DummyEVMRequest(big.NewInt(4)) pool.Add(req5) assertPoolSize() diff --git a/packages/chain/node.go b/packages/chain/node.go index 7c41713275..6159dbf582 100644 --- a/packages/chain/node.go +++ b/packages/chain/node.go @@ -344,6 +344,7 @@ func New( // Create sub-components. chainMgr, err := chainmanager.New( cni.me, + chainID, cni.chainStore, consensusStateRegistry, dkShareRegistryProvider, @@ -401,6 +402,7 @@ func New( peerPubKeys = append(peerPubKeys, cni.accessNodesFromNode...) stateMgr, err := statemanager.New( ctx, + chainID, nodeIdentity.GetPublicKey(), peerPubKeys, net, @@ -418,6 +420,7 @@ func New( } mempool := mempool.New( ctx, + chainID, nodeIdentity, net, cni.log.NewChildLogger("MP"), @@ -463,7 +466,7 @@ func New( cni.chainMetrics.NodeConn.L1AnchorReceived() recvAnchorPipeInCh <- lo.T2(anchor, l1Params) } - err = nodeConn.AttachChain(ctx, recvRequestCB, recvAnchorCB, onChainConnect, onChainDisconnect) + err = nodeConn.AttachChain(ctx, chainID, recvRequestCB, recvAnchorCB, onChainConnect, onChainDisconnect) if err != nil { return nil, err } diff --git a/packages/chain/node_test.go b/packages/chain/node_test.go index d2b74affce..e17f12ff6e 100644 --- a/packages/chain/node_test.go +++ b/packages/chain/node_test.go @@ -310,16 +310,12 @@ func newTestNodeConn(t *testing.T, l1Client clients.L1Client, iscPackageID iotag func (tnc *testNodeConn) PublishTX( ctx context.Context, - tx iotasigner.SignedTransaction, callback chain.TxPostHandler, ) error { if tnc.chainID.Empty() { tnc.t.Error("NodeConn::PublishTX before attach.") } - if !tnc.chainID.Equals(chainID) { - tnc.t.Error("unexpected chain id") - } txBytes, err := bcs.Marshal(tx.Data) if err != nil { @@ -367,7 +363,7 @@ func (tnc *testNodeConn) PublishTX( tnc.t.Logf("PublishTX, GetTransactionBlock, result=%+v", res) - anchorInfo, err := res.GetMutatedObjectByID(chainID.AsObjectID()) + anchorInfo, err := res.GetMutatedObjectByID(tnc.chainID.AsObjectID()) if err != nil { return err } @@ -388,7 +384,7 @@ func (tnc *testNodeConn) PublishTX( func (tnc *testNodeConn) AttachChain( ctx context.Context, - + chainID isc.ChainID, recvRequest chain.RequestHandler, recvAnchor chain.AnchorHandler, onChainConnect func(), diff --git a/packages/chain/statemanager/gpa/state_manager_gpa.go b/packages/chain/statemanager/gpa/state_manager_gpa.go index 5f9fe3ef3b..97a9f9a075 100644 --- a/packages/chain/statemanager/gpa/state_manager_gpa.go +++ b/packages/chain/statemanager/gpa/state_manager_gpa.go @@ -15,7 +15,6 @@ import ( gpautils "github.com/iotaledger/wasp/v2/packages/chain/statemanager/gpa/utils" "github.com/iotaledger/wasp/v2/packages/chain/statemanager/utils" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/metrics" "github.com/iotaledger/wasp/v2/packages/state" "github.com/iotaledger/wasp/v2/packages/trie" @@ -31,7 +30,6 @@ type blockInfo struct { type stateManagerGPA struct { log log.Logger - chainID isc.ChainID blockCache gpautils.BlockCache blocksToFetch blockFetchers blocksFetched blockFetchers @@ -68,7 +66,6 @@ func New( } result := &stateManagerGPA{ log: smLog, - chainID: chainID, blockCache: blockCache, blocksToFetch: newBlockFetchers(newBlockFetchersMetrics(metrics.IncBlocksFetching, metrics.DecBlocksFetching, metrics.StateManagerBlockFetched)), blocksFetched: newBlockFetchers(newBlockFetchersMetrics(metrics.IncBlocksPending, metrics.DecBlocksPending, bfmNopDurationFun)), diff --git a/packages/chain/statemanager/gpa/state_manager_gpa_cob_test.go b/packages/chain/statemanager/gpa/state_manager_gpa_cob_test.go index e98d64843e..b402646fca 100644 --- a/packages/chain/statemanager/gpa/state_manager_gpa_cob_test.go +++ b/packages/chain/statemanager/gpa/state_manager_gpa_cob_test.go @@ -28,7 +28,7 @@ func initTestChainOfBlocks(t *testing.T) ( bf := utils.NewBlockFactory(t) log := testlogger.NewLogger(t) store := state.NewStoreWithUniqueWriteMutex(mapdb.NewMapDB()) - smGPA, err := New(bf.GetChainID(), 0, nil, nil, store, mockStateManagerMetrics(), log, NewStateManagerParameters()) + smGPA, err := New(0, nil, nil, store, mockStateManagerMetrics(), log, NewStateManagerParameters()) require.NoError(t, err) sm, ok := smGPA.(*stateManagerGPA) require.True(t, ok) diff --git a/packages/chain/statemanager/gpa/test_env.go b/packages/chain/statemanager/gpa/test_env.go index c016515b91..f1848e79b5 100644 --- a/packages/chain/statemanager/gpa/test_env.go +++ b/packages/chain/statemanager/gpa/test_env.go @@ -121,7 +121,6 @@ func (teT *testEnv) addVariedNodes( sms := make(map[gpa.NodeID]gpa.GPA) stores := make(map[gpa.NodeID]state.Store) snapms := make(map[gpa.NodeID]snapshots.SnapshotManager) - chainID := teT.bf.GetChainID() for _, nodeID := range nodeIDs { var err error smLog := teT.log.NewChildLogger(nodeID.ShortString()) diff --git a/packages/chain/statemanager/gpa/utils/block_wal.go b/packages/chain/statemanager/gpa/utils/block_wal.go index e1b14207f2..f5c939fcb2 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal.go +++ b/packages/chain/statemanager/gpa/utils/block_wal.go @@ -32,8 +32,7 @@ const ( constBlockWALTmpFileSuffix = ".tmp" ) -func NewBlockWAL(log log.Logger, baseDir string, metrics *metrics.ChainBlockWALMetrics) (BlockWAL, error) { - dir := filepath.Join(baseDir, chainID.String()) +func NewBlockWAL(log log.Logger, dir string, metrics *metrics.ChainBlockWALMetrics) (BlockWAL, error) { if err := ioutils.CreateDirectory(dir, 0o777); err != nil { return nil, fmt.Errorf("BlockWAL cannot create folder %v: %w", dir, err) } diff --git a/packages/chain/statemanager/gpa/utils/block_wal_rapid_test.go b/packages/chain/statemanager/gpa/utils/block_wal_rapid_test.go index 9e3c8ac6a0..f2c090ea13 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal_rapid_test.go +++ b/packages/chain/statemanager/gpa/utils/block_wal_rapid_test.go @@ -34,7 +34,7 @@ func newBlockWALTestSM(t *rapid.T) *blockWALTestSM { bwtsmT.factory = NewBlockFactory(t) bwtsmT.lastBlockCommitment = bwtsmT.factory.GetOriginBlock().L1Commitment() bwtsmT.log = testlogger.NewLogger(t) - bwtsmT.bw, err = NewBlockWAL(bwtsmT.log, constTestFolder, bwtsmT.factory.GetChainID(), mockBlockWALMetrics()) + bwtsmT.bw, err = NewBlockWAL(bwtsmT.log, constTestFolder, mockBlockWALMetrics()) require.NoError(t, err) bwtsmT.blocks = make(map[state.BlockHash]state.Block) bwtsmT.blocksMoved = make([]state.BlockHash, 0) @@ -105,8 +105,8 @@ func (bwtsmT *blockWALTestSM) MoveBlock(t *rapid.T) { if blockHashOrig.Equals(blockHashToDamage) { t.Skip() } - fileOrigPath := walPathFromHash(bwtsmT.factory.GetChainID(), blockHashOrig) - fileToDamagePath := walPathFromHash(bwtsmT.factory.GetChainID(), blockHashToDamage) + fileOrigPath := walPathFromHash(blockHashOrig) + fileToDamagePath := walPathFromHash(blockHashToDamage) data, err := os.ReadFile(fileOrigPath) require.NoError(t, err) err = os.WriteFile(fileToDamagePath, data, 0o644) @@ -122,7 +122,7 @@ func (bwtsmT *blockWALTestSM) DamageBlock(t *rapid.T) { t.Skip() } blockHash := rapid.SampledFrom(blockHashes).Example() - filePath := walPathFromHash(bwtsmT.factory.GetChainID(), blockHash) + filePath := walPathFromHash(blockHash) data := make([]byte, 50) _, err := rand.Read(data) require.NoError(t, err) @@ -171,7 +171,7 @@ func (bwtsmT *blockWALTestSM) ReadDamagedBlock(t *rapid.T) { func (bwtsmT *blockWALTestSM) Restart(t *rapid.T) { var err error - bwtsmT.bw, err = NewBlockWAL(bwtsmT.log, constTestFolder, bwtsmT.factory.GetChainID(), mockBlockWALMetrics()) + bwtsmT.bw, err = NewBlockWAL(bwtsmT.log, constTestFolder, mockBlockWALMetrics()) require.NoError(t, err) t.Log("Block WAL restarted") } diff --git a/packages/chain/statemanager/gpa/utils/block_wal_test.go b/packages/chain/statemanager/gpa/utils/block_wal_test.go index 7aad2fa7ea..4a6cfc100c 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal_test.go +++ b/packages/chain/statemanager/gpa/utils/block_wal_test.go @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/require" bcs "github.com/iotaledger/bcs-go" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/state" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" ) @@ -23,9 +22,9 @@ func TestBlockWALBasic(t *testing.T) { factory := NewBlockFactory(t) blocks := factory.GetBlocks(5, 1) blocksInWAL := blocks[:4] - walGood, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) + walGood, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) require.NoError(t, err) - walBad, err := NewBlockWAL(log, constTestFolder, isctest.RandomChainID(), mockBlockWALMetrics()) + walBad, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) require.NoError(t, err) for i := range blocksInWAL { err = walGood.Write(blocks[i]) @@ -58,9 +57,9 @@ func TestBlockWALLegacy(t *testing.T) { factory := NewBlockFactory(t) blocks := factory.GetBlocks(4, 1) - wal, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) + wal, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) require.NoError(t, err) - writeBlocksLegacy(t, factory.GetChainID(), blocks) + writeBlocksLegacy(t, blocks) for i := range blocks { block, err := wal.Read(blocks[i].Hash()) require.NoError(t, err) @@ -76,15 +75,15 @@ func TestBlockWALNoSubfolder(t *testing.T) { factory := NewBlockFactory(t) blocks := factory.GetBlocks(4, 1) - wal, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) + wal, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) require.NoError(t, err) for i := range blocks { err = wal.Write(blocks[i]) require.NoError(t, err) } for _, block := range blocks { - pathWithSubfolder := walPathFromHash(factory.GetChainID(), block.Hash()) - pathNoSubfolder := walPathNoSubfolderFromHash(factory.GetChainID(), block.Hash()) + pathWithSubfolder := walPathFromHash(block.Hash()) + pathNoSubfolder := walPathNoSubfolderFromHash(block.Hash()) err = os.Rename(pathWithSubfolder, pathNoSubfolder) require.NoError(t, err) } @@ -104,14 +103,14 @@ func TestBlockWALOverwrite(t *testing.T) { factory := NewBlockFactory(t) blocks := factory.GetBlocks(4, 1) - wal, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) + wal, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) require.NoError(t, err) for i := range blocks { err = wal.Write(blocks[i]) require.NoError(t, err) } - file0Path := walPathFromHash(factory.GetChainID(), blocks[0].Hash()) - file1Path := walPathFromHash(factory.GetChainID(), blocks[1].Hash()) + file0Path := walPathFromHash(blocks[0].Hash()) + file1Path := walPathFromHash(blocks[1].Hash()) err = os.Rename(file1Path, file0Path) require.NoError(t, err) // block[1] is no longer in WAL @@ -142,7 +141,7 @@ func TestBlockWALRestart(t *testing.T) { factory := NewBlockFactory(t) blocks := factory.GetBlocks(4, 1) - wal, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) + wal, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) require.NoError(t, err) for i := range blocks { err = wal.Write(blocks[i]) @@ -150,7 +149,7 @@ func TestBlockWALRestart(t *testing.T) { } // Restart: WAL object is recreated - wal, err = NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) + wal, err = NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) require.NoError(t, err) for i := range blocks { require.True(t, wal.Contains(blocks[i].Hash())) @@ -171,10 +170,10 @@ func testReadAllByStateIndex(t *testing.T, addToWALFun func(BlockWAL, []state.Bl branchBlockIndex := mainBlocks - branchBlocks - 1 blocksMain := factory.GetBlocks(mainBlocks, 1) blocksBranch := factory.GetBlocksFrom(branchBlocks, 1, blocksMain[branchBlockIndex].L1Commitment(), 2) - wal, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) + wal, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) require.NoError(t, err) - addToWALFun(factory.GetChainID(), wal, blocksMain) - addToWALFun(factory.GetChainID(), wal, blocksBranch) + addToWALFun(wal, blocksMain) + addToWALFun(wal, blocksBranch) var blocksRead []state.Block err = wal.ReadAllByStateIndex(func(stateIndex uint32, block state.Block) bool { @@ -218,11 +217,11 @@ func TestReadAllByStateIndexLegacy(t *testing.T) { } func walPathFromHash(blockHash state.BlockHash) string { - return filepath.Join(constTestFolder, chainID.String(), blockWALSubFolderName(blockHash), blockWALFileName(blockHash)) + return filepath.Join(constTestFolder, blockWALSubFolderName(blockHash), blockWALFileName(blockHash)) } func walPathNoSubfolderFromHash(blockHash state.BlockHash) string { - return filepath.Join(constTestFolder, chainID.String(), blockWALFileName(blockHash)) + return filepath.Join(constTestFolder, blockWALFileName(blockHash)) } func writeBlocksLegacy(t *testing.T, blocks []state.Block) { diff --git a/packages/chain/statemanager/snapshots/snapshot_manager.go b/packages/chain/statemanager/snapshots/snapshot_manager.go index 888d4c0485..9c66698d71 100644 --- a/packages/chain/statemanager/snapshots/snapshot_manager.go +++ b/packages/chain/statemanager/snapshots/snapshot_manager.go @@ -54,7 +54,7 @@ const ( func NewSnapshotManager( ctx context.Context, shutdownCoordinator *shutdown.Coordinator, - + chainID isc.ChainID, snapshotToLoad *state.BlockHash, createPeriod uint32, delayPeriod uint32, diff --git a/packages/chain/statemanager/snapshots/snapshot_manager_test.go b/packages/chain/statemanager/snapshots/snapshot_manager_test.go index 38f23c388f..adc91e74a6 100644 --- a/packages/chain/statemanager/snapshots/snapshot_manager_test.go +++ b/packages/chain/statemanager/snapshots/snapshot_manager_test.go @@ -26,8 +26,8 @@ import ( const localSnapshotsPathConst = "testSnapshots" type ( - createNewNodeFun func(*state.BlockHash, state.Store, log.Logger) SnapshotManager - snapshotsAvailableFun func([]SnapshotInfo) + createNewNodeFun func(isc.ChainID, *state.BlockHash, state.Store, log.Logger) SnapshotManager + snapshotsAvailableFun func(isc.ChainID, []SnapshotInfo) ) var ( @@ -69,7 +69,7 @@ func testSnapshotManager( } func getLocalFuns(t *testing.T) (createNewNodeFun, snapshotsAvailableFun) { - return func(snapshotToLoad *state.BlockHash, store state.Store, log log.Logger) SnapshotManager { + return func(chainID isc.ChainID, snapshotToLoad *state.BlockHash, store state.Store, log log.Logger) SnapshotManager { snapshotManager, err := NewSnapshotManager( context.Background(), nil, @@ -86,7 +86,7 @@ func getLocalFuns(t *testing.T) (createNewNodeFun, snapshotsAvailableFun) { require.NoError(t, err) return snapshotManager }, - func([]SnapshotInfo) {} + func(isc.ChainID, []SnapshotInfo) {} } func getNetworkHTTPFuns(t *testing.T) (createNewNodeFun, snapshotsAvailableFun) { @@ -104,7 +104,7 @@ func getNetworkFileFuns(t *testing.T) (createNewNodeFun, snapshotsAvailableFun) } func getNetworkFuns(t *testing.T, networkPaths []string) (createNewNodeFun, snapshotsAvailableFun) { - return func(snapshotToLoad *state.BlockHash, store state.Store, log log.Logger) SnapshotManager { + return func(chainID isc.ChainID, snapshotToLoad *state.BlockHash, store state.Store, log log.Logger) SnapshotManager { snapshotManager, err := NewSnapshotManager( context.Background(), nil, @@ -121,7 +121,7 @@ func getNetworkFuns(t *testing.T, networkPaths []string) (createNewNodeFun, snap require.NoError(t, err) return snapshotManager }, - func(snapshotInfos []SnapshotInfo) { + func(chainID isc.ChainID, snapshotInfos []SnapshotInfo) { indexFilePath := filepath.Join(localSnapshotsCreatePathConst, chainID.String(), constIndexFileName) f, err := os.OpenFile(indexFilePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o666) require.NoError(t, err) @@ -228,7 +228,7 @@ func testSnapshotManagerAny( } } -func snapshotExists(t *testing.T, stateIndex uint32, commitment *state.L1Commitment) bool { +func snapshotExists(t *testing.T, chainID isc.ChainID, stateIndex uint32, commitment *state.L1Commitment) bool { path := filepath.Join(localSnapshotsCreatePathConst, chainID.String(), snapshotFileName(stateIndex, commitment.BlockHash())) exists, isDir, err := ioutils.PathExists(path) require.False(t, isDir) @@ -236,11 +236,11 @@ func snapshotExists(t *testing.T, stateIndex uint32, commitment *state.L1Commitm return exists } -func waitForBlock(t *testing.T, block state.Block, maxIterations int, sleep time.Duration) bool { +func waitForBlock(t *testing.T, chainID isc.ChainID, block state.Block, maxIterations int, sleep time.Duration) bool { updateAndWaitFun := func() { time.Sleep(sleep) } - snapshotExistsFun := func() bool { return snapshotExists(t, block.StateIndex(), block.L1Commitment()) } + snapshotExistsFun := func() bool { return snapshotExists(t, chainID, block.StateIndex(), block.L1Commitment()) } return ensureTrue(t, fmt.Sprintf("block %v to be committed", block.StateIndex()), snapshotExistsFun, maxIterations, updateAndWaitFun) } diff --git a/packages/chain/statemanager/state_manager.go b/packages/chain/statemanager/state_manager.go index f9b3d48042..8d64ff08e4 100644 --- a/packages/chain/statemanager/state_manager.go +++ b/packages/chain/statemanager/state_manager.go @@ -80,7 +80,6 @@ func (r *reqPreliminaryBlock) Respond(err error) { type stateManager struct { log log.Logger - chainID isc.ChainID stateManagerGPA gpa.GPA nodeRandomiser utils.NodeRandomiser nodeIDToPubKey map[gpa.NodeID]*cryptolib.PublicKey @@ -110,7 +109,7 @@ const ( func New( ctx context.Context, - + chainID isc.ChainID, me *cryptolib.PublicKey, peerPubKeys []*cryptolib.PublicKey, net peering.NetworkProvider, @@ -132,7 +131,6 @@ func New( } result := &stateManager{ log: smLog, - chainID: chainID, stateManagerGPA: stateManagerGPA, nodeRandomiser: nr, inputPipe: pipe.NewInfinitePipe[gpa.Input](), diff --git a/packages/chains/chains.go b/packages/chains/chains.go index 9068acd9ef..554e548dfc 100644 --- a/packages/chains/chains.go +++ b/packages/chains/chains.go @@ -358,6 +358,7 @@ func (c *ChainRunner) activateWithoutLocking(chainID isc.ChainID) error { //noli chainSnapshotManager, err := snapshots.NewSnapshotManager( chainCtx, chainShutdownCoordinator.Nested("SnapMgr"), + chainID, c.snapshotToLoad, c.snapshotPeriod, c.snapshotDelay, diff --git a/packages/database/manager.go b/packages/database/manager.go index 32bceffa5c..2c51c76b64 100644 --- a/packages/database/manager.go +++ b/packages/database/manager.go @@ -20,7 +20,7 @@ const ( CacheSizeDefault = 1024 * 1024 * 32 ) -type ChainStateKVStoreProvider func() (kvstore.KVStore, *sync.Mutex, error) +type ChainStateKVStoreProvider func(chainID isc.ChainID) (kvstore.KVStore, *sync.Mutex, error) type ChainStateDatabaseManager struct { mutex sync.RWMutex @@ -79,7 +79,7 @@ func NewChainStateDatabaseManager(chainRecordRegistryProvider registry.ChainReco return m, nil } -func (m *ChainStateDatabaseManager) chainStateKVStore() (kvstore.KVStore, *sync.Mutex) { +func (m *ChainStateDatabaseManager) chainStateKVStore(chainID isc.ChainID) (kvstore.KVStore, *sync.Mutex) { m.mutex.RLock() defer m.mutex.RUnlock() @@ -91,7 +91,7 @@ func (m *ChainStateDatabaseManager) chainStateKVStore() (kvstore.KVStore, *sync. return databaseChainState.database.KVStore(), &databaseChainState.database.writeMutex } -func (m *ChainStateDatabaseManager) createDatabase() (*databaseWithHealthTracker, error) { +func (m *ChainStateDatabaseManager) createDatabase(chainID isc.ChainID) (*databaseWithHealthTracker, error) { m.mutex.Lock() defer m.mutex.Unlock() @@ -114,7 +114,7 @@ func (m *ChainStateDatabaseManager) createDatabase() (*databaseWithHealthTracker return databaseChainState, nil } -func (m *ChainStateDatabaseManager) ChainStateKVStore() (kvstore.KVStore, *sync.Mutex, error) { +func (m *ChainStateDatabaseManager) ChainStateKVStore(chainID isc.ChainID) (kvstore.KVStore, *sync.Mutex, error) { if store, writeMutex := m.chainStateKVStore(chainID); store != nil { return store, writeMutex, nil } diff --git a/packages/isc/chainid.go b/packages/isc/chainid.go index 0cc78c464f..9b3c45b803 100644 --- a/packages/isc/chainid.go +++ b/packages/isc/chainid.go @@ -39,7 +39,7 @@ func ChainIDFromBytes(data []byte) (ret ChainID, err error) { return bcs.Unmarshal[ChainID](data) } -func ChainIDFromString(hexAddress string) error { +func ChainIDFromString(hexAddress string) (ChainID, error) { addr, err := cryptolib.NewAddressFromHexString(hexAddress) if err != nil { return ChainID{}, err diff --git a/packages/isc/chainid_test.go b/packages/isc/chainid_test.go index 1bdcaef198..05a8a731d8 100644 --- a/packages/isc/chainid_test.go +++ b/packages/isc/chainid_test.go @@ -12,9 +12,9 @@ import ( func TestChainIDSerialization(t *testing.T) { chainID := isc.ChainID(*iotatest.RandomAddress()) - bcs.TestCodec(t) - rwutil.BytesTest(t, isc.ChainIDFromBytes) - rwutil.StringTest(t, isc.ChainIDFromString) + bcs.TestCodec(t, chainID) + rwutil.BytesTest(t, chainID, isc.ChainIDFromBytes) + rwutil.StringTest(t, chainID, isc.ChainIDFromString) bcs.TestCodecAndHash(t, isctest.TestChainID, "b4ff315a20ce") } diff --git a/packages/isc/request.go b/packages/isc/request.go index c0565fbca9..ad9dee21bd 100644 --- a/packages/isc/request.go +++ b/packages/isc/request.go @@ -71,7 +71,6 @@ type ImpersonatedOffLedgerRequest interface { type OffLedgerRequest interface { Request - ChainID() ChainID Nonce() uint64 VerifySignature() error GasPrice() *big.Int diff --git a/packages/isc/request_evmtx.go b/packages/isc/request_evmtx.go index 4c5057bcee..3e08149006 100644 --- a/packages/isc/request_evmtx.go +++ b/packages/isc/request_evmtx.go @@ -17,22 +17,20 @@ import ( // evmOffLedgerTxRequest is used to wrap an EVM tx type evmOffLedgerTxRequest struct { - chainID ChainID `bcs:"export"` - tx *types.Transaction `bcs:"export"` - sender *EthereumAddressAgentID // not serialized + tx *types.Transaction `bcs:"export"` + sender *EthereumAddressAgentID // not serialized } var _ OffLedgerRequest = &evmOffLedgerTxRequest{} -func NewEVMOffLedgerTxRequest(chainID ChainID, tx *types.Transaction) (OffLedgerRequest, error) { +func NewEVMOffLedgerTxRequest(tx *types.Transaction) (OffLedgerRequest, error) { sender, err := evmutil.GetSender(tx) if err != nil { return nil, err } return &evmOffLedgerTxRequest{ - chainID: chainID, - tx: tx, - sender: NewEthereumAddressAgentID(sender), + tx: tx, + sender: NewEthereumAddressAgentID(sender), }, nil } @@ -67,10 +65,6 @@ func (req *evmOffLedgerTxRequest) Message() Message { ) } -func (req *evmOffLedgerTxRequest) ChainID() ChainID { - return req.chainID -} - func (req *evmOffLedgerTxRequest) GasBudget() (gas uint64, isEVM bool) { return req.tx.Gas(), true } diff --git a/packages/isc/request_offledger.go b/packages/isc/request_offledger.go index c6525ec83c..eada2fbfa1 100644 --- a/packages/isc/request_offledger.go +++ b/packages/isc/request_offledger.go @@ -18,7 +18,6 @@ import ( // OffLedgerRequestDataEssence implements UnsignedOffLedgerRequest type OffLedgerRequestDataEssence struct { allowance *Assets `bcs:"export,optional"` - chainID ChainID `bcs:"export"` msg Message `bcs:"export"` gasBudget uint64 `bcs:"export"` nonce uint64 `bcs:"export"` @@ -48,7 +47,6 @@ func NewImpersonatedOffLedgerRequest(request *OffLedgerRequestDataEssence) Imper OffLedgerRequestData: OffLedgerRequestData{ OffLedgerRequestDataEssence: OffLedgerRequestDataEssence{ allowance: request.allowance, - chainID: request.chainID, msg: request.msg, gasBudget: request.gasBudget, nonce: request.nonce, @@ -69,13 +67,11 @@ func (r *ImpersonatedOffLedgerRequestData) SenderAccount() AgentID { } func NewOffLedgerRequest( - chainID ChainID, msg Message, nonce uint64, gasBudget uint64, ) UnsignedOffLedgerRequest { return &OffLedgerRequestDataEssence{ - chainID: chainID, msg: msg, nonce: nonce, allowance: NewEmptyAssets(), @@ -106,10 +102,6 @@ func (req *OffLedgerRequestData) Message() Message { return req.msg } -func (req *OffLedgerRequestData) ChainID() ChainID { - return req.chainID -} - func (req *OffLedgerRequestDataEssence) Bytes() []byte { return bcs.MustMarshal(req) } diff --git a/packages/isc/request_offledger_test.go b/packages/isc/request_offledger_test.go index 25b59c825c..e8530d04e3 100644 --- a/packages/isc/request_offledger_test.go +++ b/packages/isc/request_offledger_test.go @@ -6,13 +6,12 @@ import ( bcs "github.com/iotaledger/bcs-go" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" ) func TestOffLedgerRequestCodec(t *testing.T) { - offLedgerRequest := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14), 123, 200).Sign(cryptolib.NewKeyPair()) + offLedgerRequest := isc.NewOffLedgerRequest(isc.NewMessage(3, 14), 123, 200).Sign(cryptolib.NewKeyPair()) bcs.TestCodec(t, offLedgerRequest.(*isc.OffLedgerRequestData)) - offLedgerRequest = isc.NewOffLedgerRequest(isctest.TestChainID, isc.NewMessage(3, 14), 123, 200).Sign(cryptolib.TestKeyPair) + offLedgerRequest = isc.NewOffLedgerRequest(isc.NewMessage(3, 14), 123, 200).Sign(cryptolib.TestKeyPair) bcs.TestCodecAndHash(t, offLedgerRequest.(*isc.OffLedgerRequestData), "0b76ea31b34a") } diff --git a/packages/isc/request_test.go b/packages/isc/request_test.go index 65bc216391..b1fe1e0d66 100644 --- a/packages/isc/request_test.go +++ b/packages/isc/request_test.go @@ -14,7 +14,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/hashing" "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/solo" "github.com/iotaledger/wasp/v2/packages/util/rwutil" "github.com/iotaledger/wasp/v2/packages/vm/core/accounts" @@ -24,7 +23,7 @@ import ( func TestImpersonatedOffLedgerRequest(t *testing.T) { requestFrom := cryptolib.NewRandomAddress() - req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(isc.HnameNil, isc.HnameNil), 0, 0). + req := isc.NewOffLedgerRequest(isc.NewMessage(isc.HnameNil, isc.HnameNil), 0, 0). WithAllowance(isc.NewAssets(1074)). WithNonce(1074). WithGasBudget(1074) @@ -39,7 +38,7 @@ func TestImpersonatedOffLedgerRequest(t *testing.T) { func TestRequestToJSONObject(t *testing.T) { pk, addr := solo.NewEthereumAccount() - req, err := isc.NewEVMOffLedgerTxRequest(isc.EmptyChainID(), types.MustSignNewTx(pk, types.NewEIP155Signer(big.NewInt(int64(1074))), + req, err := isc.NewEVMOffLedgerTxRequest(types.MustSignNewTx(pk, types.NewEIP155Signer(big.NewInt(int64(1074))), &types.LegacyTx{ Nonce: 0, To: &addr, @@ -56,7 +55,6 @@ func TestRequestToJSONObject(t *testing.T) { keyPair := cryptolib.NewKeyPair() tx2 := isc.NewOffLedgerRequest( - isc.EmptyChainID(), accounts.FuncTransferAllowanceTo.Message(isc.NewAddressAgentID(cryptolib.NewEmptyAddress())), 0, 1*isc.Million, @@ -68,7 +66,7 @@ func TestRequestToJSONObject(t *testing.T) { require.NotNil(t, obj2.SenderAccount) requestFrom := cryptolib.NewRandomAddress() - req3 := isc.NewOffLedgerRequest(isc.EmptyChainID(), isc.NewMessage(isc.HnameNil, isc.HnameNil), 0, 0) + req3 := isc.NewOffLedgerRequest(isc.NewMessage(isc.HnameNil, isc.HnameNil), 0, 0) impRequest := isc.NewImpersonatedOffLedgerRequest(req3.(*isc.OffLedgerRequestDataEssence)). WithSenderAddress(requestFrom) @@ -84,13 +82,13 @@ func TestRequestToJSONObject(t *testing.T) { func TestRequestDataSerialization(t *testing.T) { t.Run("off ledger", func(t *testing.T) { - req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14), 1337, 100).Sign(cryptolib.NewKeyPair()) + req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14), 1337, 100).Sign(cryptolib.NewKeyPair()) bcs.TestCodec(t, isc.Request(req)) rwutil.BytesTest(t, isc.Request(req), func(data []byte) (isc.Request, error) { return bcs.Unmarshal[isc.Request](data) }) - req = isc.NewOffLedgerRequest(isctest.TestChainID, isc.NewMessage(3, 14), 1337, 100).Sign(cryptolib.TestKeyPair) + req = isc.NewOffLedgerRequest(isc.NewMessage(3, 14), 1337, 100).Sign(cryptolib.TestKeyPair) bcs.TestCodecAndHash(t, isc.Request(req), "94051c6b730a") }) @@ -136,18 +134,18 @@ func TestRequestDataSerialization(t *testing.T) { } func TestRequestIDSerialization(t *testing.T) { - req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.NewKeyPair()) + req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.NewKeyPair()) requestID := req.ID() bcs.TestCodec(t, requestID) rwutil.StringTest(t, requestID, isc.RequestIDFromString) - req = isc.NewOffLedgerRequest(isctest.TestChainID, isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.TestKeyPair) + req = isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.TestKeyPair) requestID = req.ID() bcs.TestCodecAndHash(t, requestID, "16ff060b83fc") } func TestRequestRefSerialization(t *testing.T) { - req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.NewKeyPair()) + req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.NewKeyPair()) reqRef0 := &isc.RequestRef{ ID: req.ID(), Hash: hashing.PseudoRandomHash(nil), @@ -160,7 +158,7 @@ func TestRequestRefSerialization(t *testing.T) { bcs.TestCodec(t, reqRef0) - req = isc.NewOffLedgerRequest(isctest.TestChainID, isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.TestKeyPair) + req = isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.TestKeyPair) bcs.TestCodecAndHash(t, &isc.RequestRef{ ID: req.ID(), Hash: hashing.TestHash, diff --git a/packages/nodeconn/nodeconn.go b/packages/nodeconn/nodeconn.go index 207c6a6f3e..65c70aa651 100644 --- a/packages/nodeconn/nodeconn.go +++ b/packages/nodeconn/nodeconn.go @@ -12,7 +12,6 @@ import ( "time" "github.com/iotaledger/hive.go/app/shutdown" - "github.com/iotaledger/hive.go/ds/shrinkingmap" "github.com/iotaledger/hive.go/log" "github.com/iotaledger/wasp/v2/clients/iota-go/iotaclient" "github.com/iotaledger/wasp/v2/clients/iota-go/iotago" @@ -60,8 +59,9 @@ type nodeConnection struct { wsURL string httpURL string maxNumberOfRequests int - chainsLock sync.RWMutex - chainsMap *shrinkingmap.ShrinkingMap[isc.ChainID, *ncChain] + chainLock sync.RWMutex + chainID isc.ChainID + chain *ncChain shutdownHandler *shutdown.ShutdownHandler } @@ -87,32 +87,29 @@ func New( httpClient: httpClient, l1ParamsFetcher: parameters.NewL1ParamsFetcher(httpClient.Client, log), maxNumberOfRequests: maxNumberOfRequests, - chainsMap: shrinkingmap.New[isc.ChainID, *ncChain]( - shrinkingmap.WithShrinkingThresholdRatio(chainsCleanupThresholdRatio), - shrinkingmap.WithShrinkingThresholdCount(chainsCleanupThresholdCount), - ), - shutdownHandler: shutdownHandler, + shutdownHandler: shutdownHandler, }, nil } func (nc *nodeConnection) AttachChain( ctx context.Context, - + chainID isc.ChainID, recvRequest chain.RequestHandler, recvAnchor chain.AnchorHandler, onChainConnect func(), onChainDisconnect func(), ) error { ncc, err := func() (*ncChain, error) { - nc.chainsLock.Lock() - defer nc.chainsLock.Unlock() + nc.chainLock.Lock() + defer nc.chainLock.Unlock() ncc, err := newNCChain(ctx, nc, recvRequest, recvAnchor, nc.wsURL, nc.httpURL) if err != nil { return nil, err } - nc.chainsMap.Set(ncc) + nc.chainID = chainID + nc.chain = ncc util.ExecuteIfNotNil(onChainConnect) nc.LogDebugf("chain registered: %s = %s", chainID.ShortString()) @@ -135,23 +132,20 @@ func (nc *nodeConnection) AttachChain( <-ctx.Done() ncc.WaitUntilStopped() - nc.chainsLock.Lock() - defer nc.chainsLock.Unlock() + nc.chainLock.Lock() + defer nc.chainLock.Unlock() - nc.chainsMap.Delete(chainID) + nc.chain = nil + nc.chainID = isc.ChainID{} util.ExecuteIfNotNil(onChainDisconnect) - nc.LogDebugf("chain unregistered: %s = %s, |remaining|=%v", chainID.ShortString(), nc.chainsMap.Size()) + nc.LogDebugf("chain unregistered: %s = %s", chainID.ShortString()) }() return nil } func (nc *nodeConnection) GetGasCoinRef(ctx context.Context) (*coin.CoinWithRef, error) { - ncChain, ok := nc.chainsMap.Get(chainID) - if !ok { - panic("unexpected chainID") - } - gasCoinRef, gasCoinBal, err := ncChain.feed.GetChainGasCoin(ctx) + gasCoinRef, gasCoinBal, err := nc.chain.feed.GetChainGasCoin(ctx) if err != nil { return nil, err } @@ -211,11 +205,7 @@ func (nc *nodeConnection) ConsensusL1InfoProposal( } func (nc *nodeConnection) RefreshOnLedgerRequests(ctx context.Context) { - ncChain, ok := nc.chainsMap.Get(chainID) - if !ok { - panic("unexpected chainID") - } - if err := ncChain.syncChainState(ctx); err != nil { + if err := nc.chain.syncChainState(ctx); err != nil { nc.LogError(fmt.Sprintf("error refreshing outputs: %s", err.Error())) } } @@ -248,30 +238,16 @@ func (nc *nodeConnection) L1ParamsFetcher() parameters.L1ParamsFetcher { return nc.l1ParamsFetcher } -// GetChain returns the chain if it was registered, otherwise it returns an error. -func (nc *nodeConnection) getChain() (*ncChain, error) { - nc.chainsLock.RLock() - defer nc.chainsLock.RUnlock() - - ncc, exists := nc.chainsMap.Get(chainID) - if !exists { - return nil, fmt.Errorf("chain %v is not connected", chainID.String()) - } - return ncc, nil -} - func (nc *nodeConnection) PublishTX( ctx context.Context, - tx iotasigner.SignedTransaction, callback chain.TxPostHandler, ) error { // check if the chain exists - ncc, err := nc.getChain(chainID) - if err != nil { - return err + if nc.chain == nil { + return fmt.Errorf("chain not attached") } - ncc.publishTxQueue <- publishTxTask{ + nc.chain.publishTxQueue <- publishTxTask{ ctx: ctx, tx: tx, cb: callback, From 333d272a0bee1790cd13ab798937c052f3deadfd Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Fri, 8 Aug 2025 04:37:56 -0700 Subject: [PATCH 03/27] Progress on multi-chain cleanup --- packages/chain/cons/bp/batch_proposal_test.go | 2 +- packages/chain/cons/bp/bp_test.go | 1 - packages/chain/cons/gr/gr_test.go | 2 +- packages/chain/mempool/distsync/dist_sync_test.go | 2 -- .../chain/mempool/distsync/msg_missing_request_test.go | 4 +--- packages/chain/mempool/distsync/msg_share_request_test.go | 4 ++-- packages/chain/mempool/mempool_test.go | 7 ------- packages/chain/mempool/wait_req_test.go | 7 +++---- packages/chain/node.go | 2 +- packages/chain/node_test.go | 1 - packages/chains/chains.go | 2 +- 11 files changed, 10 insertions(+), 24 deletions(-) diff --git a/packages/chain/cons/bp/batch_proposal_test.go b/packages/chain/cons/bp/batch_proposal_test.go index 4f676b7bb3..fa883706ff 100644 --- a/packages/chain/cons/bp/batch_proposal_test.go +++ b/packages/chain/cons/bp/batch_proposal_test.go @@ -24,7 +24,7 @@ import ( func TestBatchProposal1Serialization(t *testing.T) { var reqRefs []*isc.RequestRef for i := uint64(0); i < 5; i++ { - req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14), i, 200).Sign(cryptolib.NewKeyPair()) + req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14), i, 200).Sign(cryptolib.NewKeyPair()) reqRefs = append(reqRefs, &isc.RequestRef{ ID: req.ID(), Hash: hashing.PseudoRandomHash(nil), diff --git a/packages/chain/cons/bp/bp_test.go b/packages/chain/cons/bp/bp_test.go index 5bcafd824e..099b78ed80 100644 --- a/packages/chain/cons/bp/bp_test.go +++ b/packages/chain/cons/bp/bp_test.go @@ -27,7 +27,6 @@ func TestOffLedgerOrdering(t *testing.T) { nodeIDs := gpa.MakeTestNodeIDs(1) // // Produce an anchor. - chainID := isc.ChainIDFromObjectID(*iotatest.RandomObjectRef().ObjectID) anchor0 := isctest.RandomStateAnchor() // Create some requests. diff --git a/packages/chain/cons/gr/gr_test.go b/packages/chain/cons/gr/gr_test.go index 76511344d7..db727d1cb6 100644 --- a/packages/chain/cons/gr/gr_test.go +++ b/packages/chain/cons/gr/gr_test.go @@ -172,7 +172,7 @@ func testGrBasic(t *testing.T, n, f int, reliable bool) { for i := range nodes { nodes[i].Time(time.Now()) mempools[i].addRequests(anchor.GetObjectRef(), []isc.Request{ - isc.NewOffLedgerRequest(anchor.ChainID(), isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(originator), + isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(originator), }) stateMgrs[i].addOriginState(anchor) } diff --git a/packages/chain/mempool/distsync/dist_sync_test.go b/packages/chain/mempool/distsync/dist_sync_test.go index b232aa3b24..9da973c2f6 100644 --- a/packages/chain/mempool/distsync/dist_sync_test.go +++ b/packages/chain/mempool/distsync/dist_sync_test.go @@ -14,7 +14,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" "github.com/iotaledger/wasp/v2/packages/vm/gas" ) @@ -48,7 +47,6 @@ func testBasic(t *testing.T, n, cmtN, cmtF int) { } req := isc.NewOffLedgerRequest( - isctest.RandomChainID(), isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 0, gas.LimitsDefault.MaxGasPerRequest, diff --git a/packages/chain/mempool/distsync/msg_missing_request_test.go b/packages/chain/mempool/distsync/msg_missing_request_test.go index 21145cdb00..82cc9d7615 100644 --- a/packages/chain/mempool/distsync/msg_missing_request_test.go +++ b/packages/chain/mempool/distsync/msg_missing_request_test.go @@ -10,7 +10,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/vm/core/governance" "github.com/iotaledger/wasp/v2/packages/vm/gas" ) @@ -20,7 +19,7 @@ func TestMsgMissingRequestSerialization(t *testing.T) { contract := governance.Contract.Hname() entryPoint := governance.FuncAddCandidateNode.Hname() gasBudget := gas.LimitsDefault.MaxGasPerRequest - req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(contract, entryPoint, nil), 0, gasBudget).Sign(senderKP) + req := isc.NewOffLedgerRequest(isc.NewMessage(contract, entryPoint, nil), 0, gasBudget).Sign(senderKP) msg := &msgMissingRequest{ gpa.BasicMessage{}, @@ -33,7 +32,6 @@ func TestMsgMissingRequestSerialization(t *testing.T) { gpa.BasicMessage{}, isc.RequestRefFromRequest( isc.NewOffLedgerRequest( - isctest.TestChainID, isc.NewMessage(contract, entryPoint, nil), 0, gasBudget, diff --git a/packages/chain/mempool/distsync/msg_share_request_test.go b/packages/chain/mempool/distsync/msg_share_request_test.go index 3644841afb..e1d482e9f6 100644 --- a/packages/chain/mempool/distsync/msg_share_request_test.go +++ b/packages/chain/mempool/distsync/msg_share_request_test.go @@ -19,7 +19,7 @@ import ( func TestMsgShareRequestSerialization(t *testing.T) { { - req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14, isc.NewCallArguments([]byte{1, 2, 3})), 1337, 100).Sign(cryptolib.NewKeyPair()) + req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments([]byte{1, 2, 3})), 1337, 100).Sign(cryptolib.NewKeyPair()) msg := &msgShareRequest{ gpa.BasicMessage{}, byte(rand.Intn(math.MaxUint8)), @@ -29,7 +29,7 @@ func TestMsgShareRequestSerialization(t *testing.T) { bcs.TestCodec(t, msg) } { - req := isc.NewOffLedgerRequest(isctest.TestChainID, isc.NewMessage(3, 14, isc.NewCallArguments([]byte{1, 2, 3})), 1337, 100).Sign(cryptolib.TestKeyPair) + req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments([]byte{1, 2, 3})), 1337, 100).Sign(cryptolib.TestKeyPair) msg := &msgShareRequest{ gpa.BasicMessage{}, 123, diff --git a/packages/chain/mempool/mempool_test.go b/packages/chain/mempool/mempool_test.go index d9f50b35fb..1b8c2c7e21 100644 --- a/packages/chain/mempool/mempool_test.go +++ b/packages/chain/mempool/mempool_test.go @@ -114,7 +114,6 @@ func testMempoolBasic(t *testing.T, n, f int, reliable bool) { te.anchor = blockFn(te, []isc.Request{onLedgerReq}, te.anchor, tangleTime) offLedgerReq := isc.NewOffLedgerRequest( - te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), 0, gas.LimitsDefault.MaxGasPerRequest, @@ -164,7 +163,6 @@ func testMempoolBasic(t *testing.T, n, f int, reliable bool) { // // Add a message, we should get it now. offLedgerReq2 := isc.NewOffLedgerRequest( - te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), 1, gas.LimitsDefault.MaxGasPerRequest, @@ -219,7 +217,6 @@ func TestMempoolsNonceGaps(t *testing.T) { // send nonces 0,1,3,6,10 createReqWithNonce := func(nonce uint64) isc.OffLedgerRequest { return isc.NewOffLedgerRequest( - te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), nonce, gas.LimitsDefault.MaxGasPerRequest, @@ -332,7 +329,6 @@ func TestMempoolsNonceGaps(t *testing.T) { t.Run("request with not enough funds is rejected", func(t *testing.T) { kp := cryptolib.NewKeyPair() req := isc.NewOffLedgerRequest( - te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), 0, gas.LimitsDefault.MaxGasPerRequest, @@ -401,7 +397,6 @@ func TestMempoolOverrideNonce(t *testing.T) { te.anchor = blockFn(te, []isc.Request{onLedgerReq}, te.anchor, tangleTime) initialReq := isc.NewOffLedgerRequest( - te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), 0, gas.LimitsDefault.MaxGasPerRequest, @@ -411,7 +406,6 @@ func TestMempoolOverrideNonce(t *testing.T) { time.Sleep(200 * time.Millisecond) // give some time for the requests to reach the pool overwritingReq := isc.NewOffLedgerRequest( - te.chainID, isc.NewMessage(isc.Hn("baz"), isc.Hn("bar"), isc.NewCallArguments()), 0, gas.LimitsDefault.MaxGasPerRequest, @@ -468,7 +462,6 @@ func TestTTL(t *testing.T) { // send offledger request, assert it is returned, make 201ms pass, assert it is not returned anymore offLedgerReq := isc.NewOffLedgerRequest( - te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), 0, gas.LimitsDefault.MaxGasPerRequest, diff --git a/packages/chain/mempool/wait_req_test.go b/packages/chain/mempool/wait_req_test.go index af3a590925..5a6a733a42 100644 --- a/packages/chain/mempool/wait_req_test.go +++ b/packages/chain/mempool/wait_req_test.go @@ -12,7 +12,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/chain/mempool" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/vm/gas" ) @@ -21,9 +20,9 @@ func TestWaitReq(t *testing.T) { ctxA := context.Background() ctxM := context.Background() - req0 := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) - req1 := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 1, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) - req2 := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 2, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) + req0 := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) + req1 := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 1, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) + req2 := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 2, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) ref0 := isc.RequestRefFromRequest(req0) ref1 := isc.RequestRefFromRequest(req1) ref2 := isc.RequestRefFromRequest(req2) diff --git a/packages/chain/node.go b/packages/chain/node.go index 6159dbf582..053d01932d 100644 --- a/packages/chain/node.go +++ b/packages/chain/node.go @@ -882,7 +882,7 @@ func (cni *chainNodeImpl) ensureConsensusInst(ctx context.Context, needConsensus consGrCtx, consGrCancel := context.WithCancel(ctx) logIndexCopy := addLogIndex cgr := consGR.New( - consGrCtx, cni.chainStore, dkShare, &logIndexCopy, cni.nodeIdentity, + consGrCtx, cni.chainID, cni.chainStore, dkShare, &logIndexCopy, cni.nodeIdentity, cni.procCache, cni.mempool, cni.stateMgr, cni.nodeConn, cni.net, diff --git a/packages/chain/node_test.go b/packages/chain/node_test.go index e17f12ff6e..f426c846da 100644 --- a/packages/chain/node_test.go +++ b/packages/chain/node_test.go @@ -196,7 +196,6 @@ func testNodeBasic(t *testing.T, n, f int, reliable bool, timeout time.Duration, // That's because the gossip in the mempool is primitive for now. for ii := range incCount { scRequest := isc.NewOffLedgerRequest( - te.chainID, inccounter.FuncIncCounter.Message(nil), uint64(ii), 20000, diff --git a/packages/chains/chains.go b/packages/chains/chains.go index 554e548dfc..5b6f4b024e 100644 --- a/packages/chains/chains.go +++ b/packages/chains/chains.go @@ -316,7 +316,7 @@ func (c *ChainRunner) activateWithoutLocking(chainID isc.ChainID) error { //noli } } - chainKVStore, writeMutex, err := c.chainStateStoreProvider() + chainKVStore, writeMutex, err := c.chainStateStoreProvider(c.chain.ID()) if err != nil { return fmt.Errorf("error when creating chain KV store: %w", err) } From b38155ec9d87cbdcf8fea30d1ce61354761ccb2a Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Mon, 11 Aug 2025 05:00:56 -0700 Subject: [PATCH 04/27] Progress on multi-chain cleanup --- components/chains/component.go | 2 +- components/chains/params.go | 10 +++++----- packages/chains/chains.go | 4 ++-- packages/chainutil/evmcall.go | 2 +- packages/chainutil/evmestimategas.go | 4 ++-- packages/evm/jsonrpc/evmchain.go | 3 --- .../evm/jsonrpc/jsonrpctest/jsonrpc_test.go | 18 +++++++++--------- packages/nodeconn/chain.go | 2 +- packages/nodeconn/nodeconn.go | 2 +- packages/publisher/events.go | 8 +------- packages/publisher/publisher.go | 3 +-- packages/registry/chain_registry.go | 4 ++-- packages/registry/chain_registry_test.go | 2 +- packages/registry/providers.go | 2 +- packages/solo/chain.go | 2 +- packages/solo/evm.go | 2 +- packages/solo/req.go | 6 +----- packages/solo/run.go | 2 +- packages/solo/solo.go | 2 +- .../testutil/chain_record_registry_provider.go | 14 +++++--------- packages/testutil/dummyrequest.go | 2 +- .../testutil/mocked_cnsensus_state_registry.go | 5 +++-- packages/webapi/services/chain.go | 2 +- 23 files changed, 43 insertions(+), 60 deletions(-) diff --git a/components/chains/component.go b/components/chains/component.go index 708de3e749..15a5059133 100644 --- a/components/chains/component.go +++ b/components/chains/component.go @@ -120,7 +120,7 @@ func provide(c *dig.Container) error { ParamsStateManager.StateManagerTimerTickPeriod, ParamsStateManager.PruningMinStatesToKeep, ParamsStateManager.PruningMaxStatesToDelete, - ParamsSnapshotManager.SnapshotsToLoad, + ParamsSnapshotManager.SnapshotToLoad, ParamsSnapshotManager.Period, ParamsSnapshotManager.Delay, ParamsSnapshotManager.LocalPath, diff --git a/components/chains/params.go b/components/chains/params.go index 88053a0b52..3ef6a7ba5e 100644 --- a/components/chains/params.go +++ b/components/chains/params.go @@ -57,11 +57,11 @@ type ParametersStateManager struct { } type ParametersSnapshotManager struct { - SnapshotsToLoad []string `default:"" usage:"list of snapshots to load; can be either single block hash of a snapshot (if a single chain has to be configured) or list of ':' to configure many chains"` - Period uint32 `default:"0" usage:"how often state snapshots should be made: 1000 meaning \"every 1000th state\", 0 meaning \"making snapshots is disabled\""` - Delay uint32 `default:"20" usage:"how many states should pass before snapshot is produced"` - LocalPath string `default:"waspdb/snap" usage:"the path to the snapshots folder in this node's disk"` - NetworkPaths []string `default:"" usage:"the list of paths to the remote (http(s)) snapshot locations; each of listed locations must contain 'INDEX' file with list of snapshot files"` + SnapshotToLoad string `default:"" usage:"block hash of a snapshot to load"` + Period uint32 `default:"0" usage:"how often state snapshots should be made: 1000 meaning \"every 1000th state\", 0 meaning \"making snapshots is disabled\""` + Delay uint32 `default:"20" usage:"how many states should pass before snapshot is produced"` + LocalPath string `default:"waspdb/snap" usage:"the path to the snapshots folder in this node's disk"` + NetworkPaths []string `default:"" usage:"the list of paths to the remote (http(s)) snapshot locations; each of listed locations must contain 'INDEX' file with list of snapshot files"` } var ( diff --git a/packages/chains/chains.go b/packages/chains/chains.go index 5b6f4b024e..4eaff5acd2 100644 --- a/packages/chains/chains.go +++ b/packages/chains/chains.go @@ -123,7 +123,7 @@ func New( smStateManagerTimerTickPeriod time.Duration, smPruningMinStatesToKeep int, smPruningMaxStatesToDelete int, - snapshotsToLoad string, + snapshotToLoad string, snapshotPeriod uint32, snapshotDelay uint32, snapshotFolderPath string, @@ -186,7 +186,7 @@ func New( chainMetricsProvider: chainMetricsProvider, validatorFeeAddr: validatorFeeAddr, } - ret.initSnapshotToLoad(snapshotsToLoad) + ret.initSnapshotToLoad(snapshotToLoad) ret.chainListener = NewChainsListener(chainListener, ret.chainAccessUpdatedCB) return ret } diff --git a/packages/chainutil/evmcall.go b/packages/chainutil/evmcall.go index 2594807e34..365e6a8e27 100644 --- a/packages/chainutil/evmcall.go +++ b/packages/chainutil/evmcall.go @@ -29,7 +29,7 @@ func EVMCall( if err != nil { return nil, err } - info := getChainInfo(anchor.ChainID(), latestState) + info := getChainInfo(latestState) // 0 means view call gasLimit := gas.EVMCallGasLimit(info.GasLimits, &info.GasFeePolicy.EVMGasRatio) diff --git a/packages/chainutil/evmestimategas.go b/packages/chainutil/evmestimategas.go index dd65ff3ae8..38fbefe46a 100644 --- a/packages/chainutil/evmestimategas.go +++ b/packages/chainutil/evmestimategas.go @@ -50,7 +50,7 @@ func EVMEstimateGas( if err != nil { return 0, err } - info := getChainInfo(anchor.ChainID(), latestState) + info := getChainInfo(latestState) maximumPossibleGas := gas.EVMCallGasLimit(info.GasLimits, &info.GasFeePolicy.EVMGasRatio) if call.Gas >= params.TxGas { @@ -153,7 +153,7 @@ func EVMEstimateGas( } func getChainInfo(chainState state.State) *isc.ChainInfo { - return governance.NewStateReaderFromChainState(chainState).GetChainInfo(chainID) + return governance.NewStateReaderFromChainState(chainState).GetChainInfo() } func resolveError(chainState state.State, receiptError *isc.UnresolvedVMError) (isOutOfGas bool, resolved *isc.VMError, err error) { diff --git a/packages/evm/jsonrpc/evmchain.go b/packages/evm/jsonrpc/evmchain.go index 722a817709..1355724020 100644 --- a/packages/evm/jsonrpc/evmchain.go +++ b/packages/evm/jsonrpc/evmchain.go @@ -92,9 +92,6 @@ func NewEVMChain( blocksFromPublisher := pipe.NewInfinitePipe[*publisher.BlockWithTrieRoot]() pub.Events.NewBlock.Hook(func(ev *publisher.ISCEvent[*publisher.BlockWithTrieRoot]) { - if !ev.ChainID.Equals(*e.backend.ISCChainID()) { - return - } blocksFromPublisher.In() <- ev.Payload }) diff --git a/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go b/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go index 3c1d47958b..de077ad894 100644 --- a/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go +++ b/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go @@ -546,7 +546,7 @@ func TestRPCEthChainID(t *testing.T) { var chainID hexutil.Uint err := env.RawClient.Call(&chainID, "eth_chainId") require.NoError(t, err) - require.EqualValues(t, evm.DefaultChainID) + require.EqualValues(t, chainID, evm.DefaultChainID) } func TestRPCTxRejectedIfNotEnoughFunds(t *testing.T) { @@ -633,8 +633,8 @@ func TestRPCTraceTx(t *testing.T) { Data: lo.Must(contractABI.Pack("sendTo", common.Address{0x2}, big.NewInt(1))), }) - req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx1)) - req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx2)) + req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx1)) + req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx2)) env.soloChain.RunRequestsSync([]isc.Request{req1, req2}) @@ -839,7 +839,7 @@ func addNRequests(n int, env *soloTestEnv, creator *ecdsa.PrivateKey, creatorAdd Data: lo.Must(contractABI.Pack("sendTo", common.Address{0x1}, big.NewInt(2))), }) - req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx1)) + req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx1)) rqs = append(rqs, req1) } @@ -938,8 +938,8 @@ func TestRPCTraceBlock(t *testing.T) { Data: lo.Must(contractABI.Pack("sendTo", common.Address{0x2}, big.NewInt(3))), }) - req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx1)) - req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx2)) + req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx1)) + req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx2)) env.soloChain.RunRequestsSync([]isc.Request{req1, req2}) bi := env.soloChain.GetLatestBlockInfo() @@ -1147,7 +1147,7 @@ func TestRPCTraceBlockSingleCall(t *testing.T) { Data: lo.Must(contractABI.Pack("sendTo", common.Address{0x1}, big.NewInt(2))), }) - req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx1)) + req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx1)) env.soloChain.RunRequestsSync([]isc.Request{req1}) bi := env.soloChain.GetLatestBlockInfo() @@ -1241,8 +1241,8 @@ func TestRPCBlockReceipt(t *testing.T) { Data: lo.Must(contractABI.Pack("sendTo", common.Address{0x2}, big.NewInt(3))), }) - req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx1)) - req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx2)) + req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx1)) + req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx2)) env.soloChain.RunRequestsSync([]isc.Request{req1, req2}) bi := env.soloChain.GetLatestBlockInfo() diff --git a/packages/nodeconn/chain.go b/packages/nodeconn/chain.go index 9cb3771dbd..678cf7361c 100644 --- a/packages/nodeconn/chain.go +++ b/packages/nodeconn/chain.go @@ -45,7 +45,7 @@ type publishTxTask struct { func newNCChain( ctx context.Context, nodeConn *nodeConnection, - + chainID isc.ChainID, requestHandler chain.RequestHandler, anchorHandler chain.AnchorHandler, wsURL string, diff --git a/packages/nodeconn/nodeconn.go b/packages/nodeconn/nodeconn.go index 65c70aa651..11f5692ab3 100644 --- a/packages/nodeconn/nodeconn.go +++ b/packages/nodeconn/nodeconn.go @@ -103,7 +103,7 @@ func (nc *nodeConnection) AttachChain( nc.chainLock.Lock() defer nc.chainLock.Unlock() - ncc, err := newNCChain(ctx, nc, recvRequest, recvAnchor, nc.wsURL, nc.httpURL) + ncc, err := newNCChain(ctx, nc, chainID, recvRequest, recvAnchor, nc.wsURL, nc.httpURL) if err != nil { return nil, err } diff --git a/packages/publisher/events.go b/packages/publisher/events.go index 5d0a015cfe..5b1681df92 100644 --- a/packages/publisher/events.go +++ b/packages/publisher/events.go @@ -27,7 +27,6 @@ type ISCEvent[T any] struct { Kind ISCEventType `json:"kind"` Issuer isc.AgentID `json:"issuer"` // (AgentID) nil means issued by the VM RequestID isc.RequestID `json:"requestID"` // (isc.RequestID) - ChainID isc.ChainID `json:"chainID"` // (isc.ChainID) Payload T `json:"payload"` } @@ -38,7 +37,7 @@ func (e *ISCEvent[T]) String() string { issuerStr = e.Issuer.String() } - return fmt.Sprintf("%s | %s (%s)", e.ChainID, issuerStr, e.Kind) + return fmt.Sprintf("%s (%s)", issuerStr, e.Kind) } type BlockWithTrieRoot struct { @@ -62,7 +61,6 @@ func triggerEvent[T any](events *Events, event *event.Event1[*ISCEvent[T]], obj Kind: obj.Kind, Issuer: obj.Issuer, RequestID: obj.RequestID, - ChainID: obj.ChainID, Payload: obj.Payload, }) } @@ -70,7 +68,6 @@ func triggerEvent[T any](events *Events, event *event.Event1[*ISCEvent[T]], obj // PublishBlockEvents extracts the events from a block, its returns a chan of ISCEventType, so they can be filtered func PublishBlockEvents(blockApplied *blockApplied, events *Events, log log.Logger) { block := blockApplied.block - chainID := blockApplied.chainID // // Publish notifications about the state change (new block). blockIndex := block.StateIndex() @@ -87,7 +84,6 @@ func PublishBlockEvents(blockApplied *blockApplied, events *Events, log log.Logg BlockInfo: blockInfo, TrieRoot: block.TrieRoot(), }, - ChainID: chainID, }) // @@ -114,7 +110,6 @@ func PublishBlockEvents(blockApplied *blockApplied, events *Events, log log.Logg Issuer: receipt.Request.SenderAccount(), Payload: &ReceiptWithError{RequestReceipt: parsedReceipt, Error: vmError}, RequestID: receipt.Request.ID(), - ChainID: chainID, }) } } @@ -133,6 +128,5 @@ func PublishBlockEvents(blockApplied *blockApplied, events *Events, log log.Logg Kind: ISCEventKindBlockEvents, Issuer: &isc.NilAgentID{}, Payload: payload, - ChainID: chainID, }) } diff --git a/packages/publisher/publisher.go b/packages/publisher/publisher.go index c21fd6ba28..b5a1158ead 100644 --- a/packages/publisher/publisher.go +++ b/packages/publisher/publisher.go @@ -36,7 +36,6 @@ type Publisher struct { // var _ chain.ChainListener = &Publisher{} type blockApplied struct { - chainID isc.ChainID block state.Block latestState kv.KVStoreReader } @@ -60,7 +59,7 @@ func New(log log.Logger) *Publisher { // BlockApplied implements the chain.ChainListener interface. // NOTE: Do not block the caller! func (p *Publisher) BlockApplied(block state.Block, latestState kv.KVStoreReader) { - p.blockAppliedPipe.In() <- &blockApplied{chainID: chainID, block: block, latestState: latestState} + p.blockAppliedPipe.In() <- &blockApplied{block: block, latestState: latestState} } // AccessNodesUpdated implements the chain.ChainListener interface. diff --git a/packages/registry/chain_registry.go b/packages/registry/chain_registry.go index 7c84468936..11903e9567 100644 --- a/packages/registry/chain_registry.go +++ b/packages/registry/chain_registry.go @@ -193,7 +193,7 @@ func (p *ChainRecordRegistryImpl) loadChainRecordsJSON() error { } for i := range tmpChainRecords.ChainRecords { - if err := p.AddChainRecord(tmpChainRecords.ChainRecords[i]); err != nil { + if err := p.SaveChainRecord(tmpChainRecords.ChainRecords[i]); err != nil { return fmt.Errorf("unable to add ChainRecord to registry: %w", err) } } @@ -255,7 +255,7 @@ func (p *ChainRecordRegistryImpl) ForEachActiveChainRecord(consumer func(*ChainR return nil } -func (p *ChainRecordRegistryImpl) AddChainRecord(chainRecord *ChainRecord) error { +func (p *ChainRecordRegistryImpl) SaveChainRecord(chainRecord *ChainRecord) error { chains := len(p.onChangeMap.All()) // Only allow a single chain if chains != 0 { diff --git a/packages/registry/chain_registry_test.go b/packages/registry/chain_registry_test.go index dcc1a9ef83..9fb2e15e37 100644 --- a/packages/registry/chain_registry_test.go +++ b/packages/registry/chain_registry_test.go @@ -15,7 +15,7 @@ func TestNewChainStateDatabaseManager(t *testing.T) { chainID := isctest.RandomChainID() - err = chainRecordRegistry.AddChainRecord(registry.NewChainRecord(chainID, false, nil)) + err = chainRecordRegistry.SaveChainRecord(registry.NewChainRecord(chainID, false, nil)) require.NoError(t, err) modified := false diff --git a/packages/registry/providers.go b/packages/registry/providers.go index 2c0fa4ef6a..de214498cd 100644 --- a/packages/registry/providers.go +++ b/packages/registry/providers.go @@ -27,7 +27,7 @@ type ChainRecordRegistryProvider interface { ChainRecord(chainID isc.ChainID) (*ChainRecord, error) ChainRecords() ([]*ChainRecord, error) ForEachActiveChainRecord(consumer func(*ChainRecord) bool) error - AddChainRecord(chainRecord *ChainRecord) error + SaveChainRecord(chainRecord *ChainRecord) error DeleteChainRecord(chainID isc.ChainID) error UpdateChainRecord(chainID isc.ChainID, f func(*ChainRecord) bool) (*ChainRecord, error) ActivateChainRecord(chainID isc.ChainID) (*ChainRecord, error) diff --git a/packages/solo/chain.go b/packages/solo/chain.go index cbc6747562..489642748a 100644 --- a/packages/solo/chain.go +++ b/packages/solo/chain.go @@ -147,7 +147,7 @@ func (ch *Chain) DeployEVMContract(creator *ecdsa.PrivateKey, abiJSON string, by // - chainID // - agentID of the chain admin // - list of contracts deployed on the chain -func (ch *Chain) GetInfo() (isc.AgentID, map[isc.Hname]*root.ContractRecord) { +func (ch *Chain) GetInfo() (isc.ChainID, isc.AgentID, map[isc.Hname]*root.ContractRecord) { res, err := ch.CallView(governance.ViewGetChainAdmin.Message()) require.NoError(ch.Env.T, err) diff --git a/packages/solo/evm.go b/packages/solo/evm.go index 84f4ec8d9d..ca69946ac9 100644 --- a/packages/solo/evm.go +++ b/packages/solo/evm.go @@ -147,7 +147,7 @@ func (ch *Chain) EVM() *jsonrpc.EVMChain { } func (ch *Chain) PostEthereumTransaction(tx *types.Transaction) (isc.CallArguments, error) { - req, err := isc.NewEVMOffLedgerTxRequest(ch.ChainID, tx) + req, err := isc.NewEVMOffLedgerTxRequest(tx) if err != nil { return nil, err } diff --git a/packages/solo/req.go b/packages/solo/req.go index 7de11392a4..75e300becb 100644 --- a/packages/solo/req.go +++ b/packages/solo/req.go @@ -207,7 +207,7 @@ func (r *CallParams) NewRequestOffLedger(ch *Chain, keyPair *cryptolib.KeyPair) if r.nonce == 0 { r.nonce = ch.Nonce(isc.NewAddressAgentID(keyPair.Address())) } - ret := isc.NewOffLedgerRequest(ch.ChainID, r.msg, r.nonce, r.gasBudget). + ret := isc.NewOffLedgerRequest(r.msg, r.nonce, r.gasBudget). WithAllowance(r.allowance) return ret.Sign(keyPair) } @@ -485,7 +485,6 @@ func (ch *Chain) callViewByHnameAtState(chainState state.State, msg isc.Message) defer ch.runVMMutex.Unlock() vmctx, err := viewcontext.New( - ch.ChainID, chainState, ch.proc, ch.log, @@ -507,7 +506,6 @@ func (ch *Chain) GetMerkleProofRaw(key []byte) *trie.MerkleProof { latestState, err := ch.LatestState() require.NoError(ch.Env.T, err) vmctx, err := viewcontext.New( - ch.ChainID, latestState, ch.proc, ch.log, @@ -529,7 +527,6 @@ func (ch *Chain) GetBlockProof(blockIndex uint32) (*blocklog.BlockInfo, *trie.Me latestState, err := ch.LatestState() require.NoError(ch.Env.T, err) vmctx, err := viewcontext.New( - ch.ChainID, latestState, ch.proc, ch.log, @@ -570,7 +567,6 @@ func (ch *Chain) GetContractStateCommitment(hn isc.Hname) ([]byte, error) { latestState, err := ch.LatestState() require.NoError(ch.Env.T, err) vmctx, err := viewcontext.New( - ch.ChainID, latestState, ch.proc, ch.log, diff --git a/packages/solo/run.go b/packages/solo/run.go index 613c8a1924..d387c7c3c0 100644 --- a/packages/solo/run.go +++ b/packages/solo/run.go @@ -125,7 +125,7 @@ func (ch *Chain) settleStateTransition(stateDraft state.StateDraft) { latestState := lo.Must(ch.LatestState()) - ch.Env.Publisher().BlockApplied(ch.ChainID, block, latestState) + ch.Env.Publisher().BlockApplied(block, latestState) blockReceipts, err := blocklog.RequestReceiptsFromBlock(block) if err != nil { diff --git a/packages/solo/solo.go b/packages/solo/solo.go index cd938ba337..b6cbb54135 100644 --- a/packages/solo/solo.go +++ b/packages/solo/solo.go @@ -171,7 +171,7 @@ func New(t Context, initOptions ...*InitOptions) *Solo { ctx: ctx, } _ = ret.publisher.Events.Published.Hook(func(ev *publisher.ISCEvent[any]) { - ret.logger.LogInfof("solo publisher: %s %s %v", ev.Kind, ev.ChainID, ev.String()) + ret.logger.LogInfof("solo publisher: %s %v", ev.Kind, ev.String()) }) go ret.publisher.Run(ctx) diff --git a/packages/testutil/chain_record_registry_provider.go b/packages/testutil/chain_record_registry_provider.go index e9ea77ba04..43a5cea2c1 100644 --- a/packages/testutil/chain_record_registry_provider.go +++ b/packages/testutil/chain_record_registry_provider.go @@ -4,28 +4,24 @@ package testutil import ( - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/registry" ) // Mock implementation of a ChainRecordRegistryProvider for testing purposes type ChainRecordRegistryProvider struct { - DB map[isc.ChainID]*registry.ChainRecord + rec *registry.ChainRecord } func NewChainRecordRegistryProvider() *ChainRecordRegistryProvider { - return &ChainRecordRegistryProvider{ - DB: map[isc.ChainID]*registry.ChainRecord{}, - } + return &ChainRecordRegistryProvider{} } -func (p *ChainRecordRegistryProvider) AddChainRecord(chainRecord *registry.ChainRecord) error { - p.DB[chainRecord.ChainID()] = chainRecord +func (p *ChainRecordRegistryProvider) SaveChainRecord(chainRecord *registry.ChainRecord) error { + p.rec = chainRecord return nil } func (p *ChainRecordRegistryProvider) LoadChainRecord() (*registry.ChainRecord, error) { - ret := p.DB[chainID] - return ret, nil + return p.rec, nil } diff --git a/packages/testutil/dummyrequest.go b/packages/testutil/dummyrequest.go index 7d9fce3570..126137b04d 100644 --- a/packages/testutil/dummyrequest.go +++ b/packages/testutil/dummyrequest.go @@ -16,7 +16,7 @@ import ( func DummyOffledgerRequest() isc.OffLedgerRequest { contract := isc.Hn("somecontract") entrypoint := isc.Hn("someentrypoint") - req := isc.NewOffLedgerRequest(isc.EmptyChainID(), isc.NewMessage(contract, entrypoint), 0, gas.LimitsDefault.MaxGasPerRequest) + req := isc.NewOffLedgerRequest(isc.NewMessage(contract, entrypoint), 0, gas.LimitsDefault.MaxGasPerRequest) keys, _ := testkey.GenKeyAddr() return req.Sign(keys) } diff --git a/packages/testutil/mocked_cnsensus_state_registry.go b/packages/testutil/mocked_cnsensus_state_registry.go index a277ba2758..c24403fa1d 100644 --- a/packages/testutil/mocked_cnsensus_state_registry.go +++ b/packages/testutil/mocked_cnsensus_state_registry.go @@ -3,6 +3,7 @@ package testutil import ( "github.com/iotaledger/wasp/v2/packages/chain/cmtlog" "github.com/iotaledger/wasp/v2/packages/cryptolib" + "github.com/iotaledger/wasp/v2/packages/isc" ) type mockedConsensusStateRegistry struct { @@ -23,14 +24,14 @@ func NewConsensusStateRegistry() cmtlog.ConsensusStateRegistry { return &mockedConsensusStateRegistry{data: map[cryptolib.AddressKey]*cmtlog.State{}} } -func (s *mockedConsensusStateRegistry) Get(cmtAddr *cryptolib.Address) (*cmtlog.State, error) { +func (s *mockedConsensusStateRegistry) Get(_ isc.ChainID, cmtAddr *cryptolib.Address) (*cmtlog.State, error) { if store, ok := s.data[cmtAddr.Key()]; ok { return store, nil } return nil, cmtlog.ErrCmtLogStateNotFound } -func (s *mockedConsensusStateRegistry) Set(cmtAddr *cryptolib.Address, state *cmtlog.State) error { +func (s *mockedConsensusStateRegistry) Set(_ isc.ChainID, cmtAddr *cryptolib.Address, state *cmtlog.State) error { s.data[cmtAddr.Key()] = state return nil } diff --git a/packages/webapi/services/chain.go b/packages/webapi/services/chain.go index d4edf86b0a..af8ef7cd3b 100644 --- a/packages/webapi/services/chain.go +++ b/packages/webapi/services/chain.go @@ -87,7 +87,7 @@ func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { return err } } else { - if err := c.chainRecordRegistryProvider.AddChainRecord(chainRecord); err != nil { + if err := c.chainRecordRegistryProvider.SaveChainRecord(chainRecord); err != nil { c.log.LogInfof("AddChainRec %v %v", chainRecord, err) return err From ecfb860125f938579d12f33b8663428837acf7b6 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Mon, 11 Aug 2025 07:31:26 -0700 Subject: [PATCH 05/27] Progress on multi-chain cleanup --- packages/isc/chaininfo.go | 1 - packages/isc/request_evmcall.go | 8 +------ packages/isc/sandbox_interface.go | 2 -- packages/vm/core/blocklog/blocklog_test.go | 3 +-- packages/vm/core/blocklog/interface_test.go | 6 +++--- packages/vm/core/blocklog/receipt_test.go | 4 ---- packages/vm/core/evm/emulator/emulator.go | 19 ++++++----------- .../core/evm/evmimpl/iscmagic_sandbox_view.go | 5 ----- packages/vm/core/evm/evmtest/bench_test.go | 2 +- packages/vm/core/evm/evmtest/evm_test.go | 2 +- .../governance/governanceimpl/chaininfo.go | 2 +- packages/vm/core/governance/internal.go | 1 - packages/vm/core/testcore/base_test.go | 5 ++--- packages/vm/core/testcore/root_test.go | 2 +- packages/vm/execution/interface.go | 1 - packages/vm/sandbox/sandboxbase.go | 5 ----- packages/vm/viewcontext/viewcontext.go | 8 +------ packages/vm/vmimpl/runreq.go | 2 +- packages/vm/vmimpl/vmrun_test.go | 4 ++-- packages/webapi/common/vm.go | 2 +- .../webapi/controllers/chain/access_nodes.go | 12 ++--------- packages/webapi/controllers/chain/chain.go | 2 +- .../webapi/controllers/chain/management.go | 11 +--------- .../controllerutils/controllerutils.go | 4 ++-- packages/webapi/controllers/metrics/chain.go | 21 +++---------------- packages/webapi/interfaces/interfaces.go | 2 +- packages/webapi/params/decoder.go | 2 +- 27 files changed, 33 insertions(+), 105 deletions(-) diff --git a/packages/isc/chaininfo.go b/packages/isc/chaininfo.go index 6321de1292..696cbe6797 100644 --- a/packages/isc/chaininfo.go +++ b/packages/isc/chaininfo.go @@ -10,7 +10,6 @@ import ( // ChainInfo is an API structure containing the main parameters of the chain type ChainInfo struct { - ChainID ChainID ChainAdmin AgentID GasFeePolicy *gas.FeePolicy GasLimits *gas.Limits diff --git a/packages/isc/request_evmcall.go b/packages/isc/request_evmcall.go index 74b461ba97..69e6d32646 100644 --- a/packages/isc/request_evmcall.go +++ b/packages/isc/request_evmcall.go @@ -17,15 +17,13 @@ import ( // evmOffLedgerCallRequest is used to wrap an EVM call (for the eth_call or eth_estimateGas jsonrpc methods) type evmOffLedgerCallRequest struct { - chainID ChainID `bcs:"export"` callMsg ethereum.CallMsg `bcs:"export"` } var _ OffLedgerRequest = &evmOffLedgerCallRequest{} -func NewEVMOffLedgerCallRequest(chainID ChainID, callMsg ethereum.CallMsg) OffLedgerRequest { +func NewEVMOffLedgerCallRequest(callMsg ethereum.CallMsg) OffLedgerRequest { return &evmOffLedgerCallRequest{ - chainID: chainID, callMsg: callMsg, } } @@ -51,10 +49,6 @@ func (req *evmOffLedgerCallRequest) Message() Message { ) } -func (req *evmOffLedgerCallRequest) ChainID() ChainID { - return req.chainID -} - func (req *evmOffLedgerCallRequest) GasBudget() (gas uint64, isEVM bool) { return req.callMsg.Gas, true } diff --git a/packages/isc/sandbox_interface.go b/packages/isc/sandbox_interface.go index 5166f94f50..9695a16225 100644 --- a/packages/isc/sandbox_interface.go +++ b/packages/isc/sandbox_interface.go @@ -32,8 +32,6 @@ type SandboxBase interface { Balance // Params returns the parameters of the current call Params() CallArguments - // ChainID returns the chain ID - ChainID() ChainID // ChainAdmin returns the chain admin AgentID (not necessarily the same as "anchor owner") ChainAdmin() AgentID // ChainInfo returns information and configuration parameters of the chain diff --git a/packages/vm/core/blocklog/blocklog_test.go b/packages/vm/core/blocklog/blocklog_test.go index 174e910a1c..f4e4354794 100644 --- a/packages/vm/core/blocklog/blocklog_test.go +++ b/packages/vm/core/blocklog/blocklog_test.go @@ -14,7 +14,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/hashing" "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/kv" "github.com/iotaledger/wasp/v2/packages/kv/collections" "github.com/iotaledger/wasp/v2/packages/kv/dict" @@ -24,7 +23,7 @@ import ( func TestSerdeRequestReceipt(t *testing.T) { nonce := uint64(time.Now().UnixNano()) - req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(isc.Hn("0"), isc.Hn("0")), nonce, gas.LimitsDefault.MaxGasPerRequest) + req := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("0"), isc.Hn("0")), nonce, gas.LimitsDefault.MaxGasPerRequest) signedReq := req.Sign(cryptolib.NewKeyPair()) rec := &RequestReceipt{ Request: signedReq, diff --git a/packages/vm/core/blocklog/interface_test.go b/packages/vm/core/blocklog/interface_test.go index 434e96c1f0..51d318292e 100644 --- a/packages/vm/core/blocklog/interface_test.go +++ b/packages/vm/core/blocklog/interface_test.go @@ -13,7 +13,7 @@ import ( func TestOutputRequestReceiptCodec(t *testing.T) { v := &blocklog.RequestReceipt{ - Request: isc.NewOffLedgerRequest(isc.EmptyChainID(), isc.NewMessage(isc.Hn("0"), + Request: isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("0"), isc.Hn("0")), 123, 456).Sign(cryptolib.NewKeyPair()), Error: &isc.UnresolvedVMError{ ErrorCode: blocklog.ErrBlockNotFound.Code(), @@ -45,7 +45,7 @@ func TestOutputRequestReceiptsCodec(t *testing.T) { BlockIndex: 123, Receipts: []*blocklog.RequestReceipt{ { - Request: isc.NewOffLedgerRequest(isc.EmptyChainID(), isc.NewMessage(isc.Hn("0"), + Request: isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("0"), isc.Hn("0")), 123, 456).Sign(cryptolib.NewKeyPair()), Error: &isc.UnresolvedVMError{ ErrorCode: blocklog.ErrBlockNotFound.Code(), @@ -66,7 +66,7 @@ func TestOutputRequestReceiptsCodec(t *testing.T) { }, }, { - Request: isc.NewOffLedgerRequest(isc.EmptyChainID(), isc.NewMessage(isc.Hn("0"), + Request: isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("0"), isc.Hn("0")), 123, 456).Sign(cryptolib.NewKeyPair()), Error: &isc.UnresolvedVMError{ ErrorCode: blocklog.ErrBlockNotFound.Code(), diff --git a/packages/vm/core/blocklog/receipt_test.go b/packages/vm/core/blocklog/receipt_test.go index 9cce000e3a..1edc7dfa66 100644 --- a/packages/vm/core/blocklog/receipt_test.go +++ b/packages/vm/core/blocklog/receipt_test.go @@ -14,7 +14,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/evm/evmutil" "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/util" "github.com/iotaledger/wasp/v2/packages/vm/core/blocklog" "github.com/iotaledger/wasp/v2/packages/vm/gas" @@ -23,7 +22,6 @@ import ( func TestReceiptCodec(t *testing.T) { bcs.TestCodec(t, blocklog.RequestReceipt{ Request: isc.NewOffLedgerRequest( - isc.EmptyChainID(), isc.NewMessage(isc.Hn("0"), isc.Hn("0")), 123, gas.LimitsDefault.MaxGasPerRequest, @@ -36,7 +34,6 @@ func TestReceiptCodec(t *testing.T) { bcs.TestCodecAndHash(t, blocklog.RequestReceipt{ Request: isc.NewOffLedgerRequest( - isctest.TestChainID, isc.NewMessage(isc.Hn("account"), isc.Hn("deposit")), 123, gas.LimitsDefault.MaxGasPerRequest, @@ -62,7 +59,6 @@ func TestReceiptCodecEVM(t *testing.T) { rec := blocklog.RequestReceipt{ Request: lo.Must(isc.NewEVMOffLedgerTxRequest( - isctest.RandomChainID(), tx, )), } diff --git a/packages/vm/core/evm/emulator/emulator.go b/packages/vm/core/evm/emulator/emulator.go index 45a27f601e..c52df5b720 100644 --- a/packages/vm/core/evm/emulator/emulator.go +++ b/packages/vm/core/evm/emulator/emulator.go @@ -7,6 +7,7 @@ import ( "bytes" "fmt" "math/big" + "sync/atomic" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/accounts/abi" @@ -19,7 +20,6 @@ import ( "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/params" - lru "github.com/hashicorp/golang-lru/v2" "github.com/iotaledger/wasp/v2/packages/evm/evmutil" "github.com/iotaledger/wasp/v2/packages/kv" @@ -57,20 +57,13 @@ type GasLimits struct { Call uint64 } -var configCache *lru.Cache[int, *params.ChainConfig] - -func init() { - var err error - configCache, err = lru.New[int, *params.ChainConfig](100) - if err != nil { - panic(err) - } -} +var configCache atomic.Pointer[params.ChainConfig] func getConfig(chainID int) *params.ChainConfig { - if c, ok := configCache.Get(chainID); ok { + if c := configCache.Load(); c != nil { return c } + c := ¶ms.ChainConfig{ ChainID: big.NewInt(int64(chainID)), HomesteadBlock: big.NewInt(0), @@ -91,7 +84,7 @@ func getConfig(chainID int) *params.ChainConfig { if !c.IsShanghai(common.Big0, 0) { panic("ChainConfig should report EVM version as Shanghai") } - configCache.Add(c) + configCache.Store(c) return c } @@ -128,7 +121,7 @@ func Init( if bdb.Initialized() { panic("evm state already initialized in kvstore") } - bdb.Init(timestamp) + bdb.Init(chainID, timestamp) stateDBSubrealm := StateDBSubrealm(emulatorState) for addr, account := range alloc { diff --git a/packages/vm/core/evm/evmimpl/iscmagic_sandbox_view.go b/packages/vm/core/evm/evmimpl/iscmagic_sandbox_view.go index 3bd323f25e..dfe2f48572 100644 --- a/packages/vm/core/evm/evmimpl/iscmagic_sandbox_view.go +++ b/packages/vm/core/evm/evmimpl/iscmagic_sandbox_view.go @@ -11,11 +11,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/vm/core/evm/iscmagic" ) -// handler for ISCSandbox::getChainID -func (h *magicContractHandler) GetChainID() isc.ChainID { - return h.ctx.ChainID() -} - // handler for ISCSandbox::getChainAdmin func (h *magicContractHandler) GetChainAdmin() iscmagic.ISCAgentID { return iscmagic.WrapISCAgentID(h.ctx.ChainAdmin()) diff --git a/packages/vm/core/evm/evmtest/bench_test.go b/packages/vm/core/evm/evmtest/bench_test.go index ec579893f6..7a2eda6ac9 100644 --- a/packages/vm/core/evm/evmtest/bench_test.go +++ b/packages/vm/core/evm/evmtest/bench_test.go @@ -34,7 +34,7 @@ func initBenchmark(b *testing.B) (*solo.Chain, []isc.Request) { gasLimit: gasLimit, }}, "store", uint32(i)) require.NoError(b, err) - reqs[i], err = isc.NewEVMOffLedgerTxRequest(env.Chain.ChainID, tx) + reqs[i], err = isc.NewEVMOffLedgerTxRequest(tx) require.NoError(b, err) } diff --git a/packages/vm/core/evm/evmtest/evm_test.go b/packages/vm/core/evm/evmtest/evm_test.go index 76d09fc311..647fb87dec 100644 --- a/packages/vm/core/evm/evmtest/evm_test.go +++ b/packages/vm/core/evm/evmtest/evm_test.go @@ -2050,7 +2050,7 @@ func testEVMWithdrawWithFailedTx(t *testing.T, withdrawFirst bool) { iscmagic.WrapISCAssets(isc.NewEmptyAssets()), ) require.NoError(t, err) - withdrawRequest, err := isc.NewEVMOffLedgerTxRequest(env.Chain.ChainID, tx) + withdrawRequest, err := isc.NewEVMOffLedgerTxRequest(tx) require.NoError(t, err) failingRequest := solo.NewCallParams(accounts.FuncWithdraw.Message()). diff --git a/packages/vm/core/governance/governanceimpl/chaininfo.go b/packages/vm/core/governance/governanceimpl/chaininfo.go index 228ba5a827..aea5430c2f 100644 --- a/packages/vm/core/governance/governanceimpl/chaininfo.go +++ b/packages/vm/core/governance/governanceimpl/chaininfo.go @@ -11,5 +11,5 @@ import ( // getChainInfo view returns general info about the chain: chain ID, chain admin ID, limits and default fees func getChainInfo(ctx isc.SandboxView) *isc.ChainInfo { state := governance.NewStateReaderFromSandbox(ctx) - return state.GetChainInfo(ctx.ChainID()) + return state.GetChainInfo() } diff --git a/packages/vm/core/governance/internal.go b/packages/vm/core/governance/internal.go index 9a43d77db3..32bab3af5f 100644 --- a/packages/vm/core/governance/internal.go +++ b/packages/vm/core/governance/internal.go @@ -32,7 +32,6 @@ func (s *StateWriter) SetInitialState(chainAdmin isc.AgentID, blockKeepAmount in func (s *StateReader) GetChainInfo() *isc.ChainInfo { ret := &isc.ChainInfo{ Metadata: &isc.PublicChainMetadata{}, - ChainID: chainID, } ret.ChainAdmin = s.GetChainAdmin() ret.GasFeePolicy = s.GetGasFeePolicy() diff --git a/packages/vm/core/testcore/base_test.go b/packages/vm/core/testcore/base_test.go index 07e3953dbe..208ba35710 100644 --- a/packages/vm/core/testcore/base_test.go +++ b/packages/vm/core/testcore/base_test.go @@ -461,7 +461,6 @@ func TestInvalidSignatureRequestsAreNotProcessed(t *testing.T) { // produce a badly signed off-ledger request req := isc.NewOffLedgerRequest( - ch.ChainID, isc.NewMessage(isc.Hn("contract"), isc.Hn("entrypoint"), nil), 0, math.MaxUint64, @@ -510,8 +509,8 @@ func TestBatchWithSkippedRequestsReceipts(t *testing.T) { require.NoError(t, err) // create a request with an invalid nonce that must be skipped - skipReq := isc.NewOffLedgerRequest(ch.ChainID, isc.NewMessage(isc.Hn("contract"), isc.Hn("entrypoint"), nil), 0, math.MaxUint64).WithNonce(9999).Sign(user) - validReq := isc.NewOffLedgerRequest(ch.ChainID, isc.NewMessage(isc.Hn("contract"), isc.Hn("entrypoint"), nil), 0, math.MaxUint64).WithNonce(0).Sign(user) + skipReq := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("contract"), isc.Hn("entrypoint"), nil), 0, math.MaxUint64).WithNonce(9999).Sign(user) + validReq := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("contract"), isc.Hn("entrypoint"), nil), 0, math.MaxUint64).WithNonce(0).Sign(user) ch.RunRequestsSync([]isc.Request{skipReq, validReq}) diff --git a/packages/vm/core/testcore/root_test.go b/packages/vm/core/testcore/root_test.go index 9c788b546d..fd3cf46b88 100644 --- a/packages/vm/core/testcore/root_test.go +++ b/packages/vm/core/testcore/root_test.go @@ -44,7 +44,7 @@ func TestGetInfo(t *testing.T) { chainID, admin, contracts := chain.GetInfo() - require.EqualValues(t, chain.ChainID) + require.EqualValues(t, chainID, chain.ChainID) require.EqualValues(t, chain.AdminAgentID(), admin) require.GreaterOrEqual(t, len(contracts), len(corecontracts.All)) diff --git a/packages/vm/execution/interface.go b/packages/vm/execution/interface.go index 5cf2095ae8..9975607b63 100644 --- a/packages/vm/execution/interface.go +++ b/packages/vm/execution/interface.go @@ -39,7 +39,6 @@ type WaspCallContext interface { GetBaseTokensBalance(agentID isc.AgentID) (coin.Value, *big.Int) GetCoinBalance(agentID isc.AgentID, coinType coin.Type) coin.Value Call(msg isc.Message, allowance *isc.Assets) isc.CallArguments - ChainID() isc.ChainID ChainAdmin() isc.AgentID ChainInfo() *isc.ChainInfo CurrentContractHname() isc.Hname diff --git a/packages/vm/sandbox/sandboxbase.go b/packages/vm/sandbox/sandboxbase.go index 4c50fd8590..ad72c08f15 100644 --- a/packages/vm/sandbox/sandboxbase.go +++ b/packages/vm/sandbox/sandboxbase.go @@ -77,11 +77,6 @@ func (s *SandboxBase) GetCoinInfo(coinType coin.Type) (*parameters.IotaCoinInfo, return s.Ctx.GetCoinInfo(coinType) } -func (s *SandboxBase) ChainID() isc.ChainID { - s.Ctx.GasBurn(gas.BurnCodeGetContext) - return s.Ctx.ChainID() -} - func (s *SandboxBase) ChainAdmin() isc.AgentID { s.Ctx.GasBurn(gas.BurnCodeGetContext) return s.Ctx.ChainAdmin() diff --git a/packages/vm/viewcontext/viewcontext.go b/packages/vm/viewcontext/viewcontext.go index 6ef6044107..d24234cf55 100644 --- a/packages/vm/viewcontext/viewcontext.go +++ b/packages/vm/viewcontext/viewcontext.go @@ -31,7 +31,6 @@ import ( type ViewContext struct { processors *processors.Config stateReader state.State - chainID isc.ChainID log log.Logger chainInfo *isc.ChainInfo gasBurnLog *gas.BurnLog @@ -54,7 +53,6 @@ func New( return &ViewContext{ processors: processors, stateReader: stateReader, - chainID: chainID, log: log, gasBurnLoggingEnabled: gasBurnLoggingEnabled, schemaVersion: stateReader.SchemaVersion(), @@ -152,10 +150,6 @@ func (ctx *ViewContext) ChainInfo() *isc.ChainInfo { return ctx.chainInfo } -func (ctx *ViewContext) ChainID() isc.ChainID { - return ctx.chainInfo.ChainID -} - func (ctx *ViewContext) ChainAdmin() isc.AgentID { return ctx.chainInfo.ChainAdmin } @@ -225,7 +219,7 @@ func (ctx *ViewContext) callView(msg isc.Message) (ret isc.CallArguments) { func (ctx *ViewContext) initAndCallView(msg isc.Message) (ret isc.CallArguments) { ctx.chainInfo = governance.NewStateReader(ctx.contractStateReaderWithGasBurn(governance.Contract.Hname())). - GetChainInfo(ctx.chainID) + GetChainInfo() ctx.gasBudget = ctx.chainInfo.GasLimits.MaxGasExternalViewCall if ctx.gasBurnLoggingEnabled { ctx.gasBurnLog = gas.NewGasBurnLog() diff --git a/packages/vm/vmimpl/runreq.go b/packages/vm/vmimpl/runreq.go index db450e1c1f..efcfab0601 100644 --- a/packages/vm/vmimpl/runreq.go +++ b/packages/vm/vmimpl/runreq.go @@ -496,5 +496,5 @@ func (reqctx *requestContext) GetContractRecord(contractHname isc.Hname) (ret *r } func (vmctx *vmContext) loadChainConfig() { - vmctx.chainInfo = governance.NewStateReaderFromChainState(vmctx.stateDraft).GetChainInfo(vmctx.ChainID()) + vmctx.chainInfo = governance.NewStateReaderFromChainState(vmctx.stateDraft).GetChainInfo() } diff --git a/packages/vm/vmimpl/vmrun_test.go b/packages/vm/vmimpl/vmrun_test.go index 65b0097286..24706ba86d 100644 --- a/packages/vm/vmimpl/vmrun_test.go +++ b/packages/vm/vmimpl/vmrun_test.go @@ -83,7 +83,7 @@ func initChain(chainCreator *cryptolib.KeyPair, store state.Store) *isc.StateAnc func makeOnLedgerRequest( t *testing.T, sender *cryptolib.KeyPair, - + chainID isc.ChainID, msg isc.Message, baseTokens uint64, ) isc.OnLedgerRequest { @@ -128,7 +128,7 @@ func transitionAnchor( state := lo.Must(store.StateByTrieRoot(block.TrieRoot())) chainInfo := governance.NewStateReaderFromChainState(state). - GetChainInfo(anchor.ChainID()) + GetChainInfo() newStateMetadata := transaction.NewStateMetadata( stateMetadata.SchemaVersion, diff --git a/packages/webapi/common/vm.go b/packages/webapi/common/vm.go index c70b91134e..813e6dab02 100644 --- a/packages/webapi/common/vm.go +++ b/packages/webapi/common/vm.go @@ -73,7 +73,7 @@ func CallView(ch chainpkg.Chain, msg isc.Message, blockIndexOrHash string) (isc. } } - return chainutil.CallView(ch.ID(), chainState, ch.Processors(), ch.Log(), msg) + return chainutil.CallView(chainState, ch.Processors(), ch.Log(), msg) } func EstimateGas(ch chainpkg.Chain, req isc.Request) (*isc.Receipt, error) { diff --git a/packages/webapi/controllers/chain/access_nodes.go b/packages/webapi/controllers/chain/access_nodes.go index ba7580e8ca..9bd45ad075 100644 --- a/packages/webapi/controllers/chain/access_nodes.go +++ b/packages/webapi/controllers/chain/access_nodes.go @@ -14,17 +14,13 @@ import ( func (c *Controller) addAccessNode(e echo.Context) error { controllerutils.SetOperation(e, "add_access_node") - chain, err := c.chainService.GetChain() - if err != nil { - return err - } peer := e.Param(params.ParamPeer) if peer == "" { return errors.New("no peer provided") } - if err := c.nodeService.AddAccessNode(chain.ID(), peer); err != nil { + if err := c.nodeService.AddAccessNode(peer); err != nil { if errors.Is(err, interfaces.ErrPeerNotFound) { return apierrors.PeerNameNotFoundError(peer) } @@ -37,17 +33,13 @@ func (c *Controller) addAccessNode(e echo.Context) error { func (c *Controller) removeAccessNode(e echo.Context) error { controllerutils.SetOperation(e, "remove_access_node") - chain, err := c.chainService.GetChain() - if err != nil { - return err - } peer := e.Param(params.ParamPeer) if peer == "" { return errors.New("no peer provided") } - if err := c.nodeService.DeleteAccessNode(chain.ID(), peer); err != nil { + if err := c.nodeService.DeleteAccessNode(peer); err != nil { return err } diff --git a/packages/webapi/controllers/chain/chain.go b/packages/webapi/controllers/chain/chain.go index b385300527..6549ccaddc 100644 --- a/packages/webapi/controllers/chain/chain.go +++ b/packages/webapi/controllers/chain/chain.go @@ -34,7 +34,7 @@ func (c *Controller) getCommitteeInfo(e echo.Context) error { return apierrors.ChainNotFoundError() } - chainNodeInfo, err := c.committeeService.GetCommitteeInfo(chain.ChainID) + chainNodeInfo, err := c.committeeService.GetCommitteeInfo() if err != nil { if errors.Is(err, services.ErrNotInCommittee) { return e.JSON(http.StatusOK, models.CommitteeInfoResponse{}) diff --git a/packages/webapi/controllers/chain/management.go b/packages/webapi/controllers/chain/management.go index 23363fd6cc..8fc7bc66a9 100644 --- a/packages/webapi/controllers/chain/management.go +++ b/packages/webapi/controllers/chain/management.go @@ -11,7 +11,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/webapi/apierrors" "github.com/iotaledger/wasp/v2/packages/webapi/controllers/controllerutils" "github.com/iotaledger/wasp/v2/packages/webapi/models" - "github.com/iotaledger/wasp/v2/packages/webapi/params" ) func (c *Controller) activateChain(e echo.Context) error { @@ -30,12 +29,8 @@ func (c *Controller) activateChain(e echo.Context) error { func (c *Controller) deactivateChain(e echo.Context) error { controllerutils.SetOperation(e, "deactivate_chain") - chain, err := c.chainService.GetChain() - if err != nil { - return err - } - if err := c.chainService.DeactivateChain(chain.ID()); err != nil { + if err := c.chainService.DeactivateChain(); err != nil { return err } @@ -66,10 +61,6 @@ func (c *Controller) rotateChain(e echo.Context) error { func (c *Controller) setChainRecord(e echo.Context) error { controllerutils.SetOperation(e, "set_chain_record") - chainID, err := params.DecodeChainID(e) - if err != nil { - return err - } // No need to validate the chain existence here (like above), as the service will create a chain record if it does not exist. diff --git a/packages/webapi/controllers/controllerutils/controllerutils.go b/packages/webapi/controllers/controllerutils/controllerutils.go index 9b58b4fdbd..48a45d0c13 100644 --- a/packages/webapi/controllers/controllerutils/controllerutils.go +++ b/packages/webapi/controllers/controllerutils/controllerutils.go @@ -14,14 +14,14 @@ const ( EchoContextKeyOperation = "operation" ) -func ChainIDFromParams(c echo.Context) error { +func ChainIDFromParams(c echo.Context) (isc.ChainID, error) { chainID, err := params.DecodeChainID(c) if err != nil { return isc.ChainID{}, err } // set chainID to be used by the prometheus metrics - c.Set(EchoContextKeyChainID) + c.Set(EchoContextKeyChainID, chainID) return chainID, nil } diff --git a/packages/webapi/controllers/metrics/chain.go b/packages/webapi/controllers/metrics/chain.go index ba813be86b..bef6f2d7a8 100644 --- a/packages/webapi/controllers/metrics/chain.go +++ b/packages/webapi/controllers/metrics/chain.go @@ -9,35 +9,20 @@ import ( ) func (c *Controller) getChainMessageMetrics(e echo.Context) error { - ch, err := c.chainService.GetChain() - if err != nil { - return err - } - - metricsReport := c.metricsService.GetChainMessageMetrics(ch.ID()) + metricsReport := c.metricsService.GetChainMessageMetrics() mappedMetrics := models.MapChainMessageMetrics(metricsReport) return e.JSON(http.StatusOK, mappedMetrics) } func (c *Controller) getChainWorkflowMetrics(e echo.Context) error { - ch, err := c.chainService.GetChain() - if err != nil { - return err - } - - metricsReport := c.metricsService.GetChainConsensusWorkflowMetrics(ch.ID()) + metricsReport := c.metricsService.GetChainConsensusWorkflowMetrics() return e.JSON(http.StatusOK, metricsReport) } func (c *Controller) getChainPipeMetrics(e echo.Context) error { - ch, err := c.chainService.GetChain() - if err != nil { - return err - } - - metricsReport := c.metricsService.GetChainConsensusPipeMetrics(ch.ID()) + metricsReport := c.metricsService.GetChainConsensusPipeMetrics() return e.JSON(http.StatusOK, metricsReport) } diff --git a/packages/webapi/interfaces/interfaces.go b/packages/webapi/interfaces/interfaces.go index 899460e18d..de7e90922d 100644 --- a/packages/webapi/interfaces/interfaces.go +++ b/packages/webapi/interfaces/interfaces.go @@ -34,7 +34,7 @@ type APIController interface { } type ChainService interface { - ActivateChain() error + ActivateChain(chainID isc.ChainID) error SetChainRecord(chainRecord *registry.ChainRecord) error DeactivateChain() error GetAllChainIDs() ([]isc.ChainID, error) diff --git a/packages/webapi/params/decoder.go b/packages/webapi/params/decoder.go index 4bbd6eebcc..c9cbec0274 100644 --- a/packages/webapi/params/decoder.go +++ b/packages/webapi/params/decoder.go @@ -10,7 +10,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/webapi/apierrors" ) -func DecodeChainID(e echo.Context) error { +func DecodeChainID(e echo.Context) (isc.ChainID, error) { chainID, err := isc.ChainIDFromString(e.Param(ParamChainID)) if err != nil { return isc.ChainID{}, apierrors.InvalidPropertyError(ParamChainID, err) From f1ca9e078dbb77a6a6f51d12a4c21ea0150deb75 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Tue, 12 Aug 2025 03:58:42 -0700 Subject: [PATCH 06/27] Progress on multi-chain cleanup --- clients/apiclient/README.md | 2 +- clients/apiclient/api_chains.go | 420 +++++++-------- clients/apiclient/api_corecontracts.go | 508 +++++++++--------- clients/apiclient/generate_client.sh | 2 +- .../apiclient/model_chain_info_response.go | 18 +- .../model_committee_info_response.go | 14 +- .../model_gov_chain_info_response.go | 20 +- .../model_request_processed_response.go | 18 +- clients/chainclient/chainclient.go | 2 +- clients/multiclient/chain_record.go | 2 +- packages/chains/chains.go | 52 +- packages/chainutil/evmcall.go | 2 +- packages/chainutil/evmestimategas.go | 2 +- packages/database/manager.go | 2 +- packages/database/manager_test.go | 5 +- packages/registry/chain_registry.go | 49 +- packages/registry/chain_registry_test.go | 6 +- packages/registry/providers.go | 16 +- .../chain_record_registry_provider.go | 2 +- .../webapi/controllers/chain/management.go | 13 +- .../controllers/corecontracts/governance.go | 6 +- .../webapi/controllers/requests/offledger.go | 2 +- packages/webapi/dto/chain.go | 4 +- packages/webapi/interfaces/interfaces.go | 5 +- packages/webapi/services/chain.go | 44 +- packages/webapi/services/committee.go | 2 +- packages/webapi/services/evm.go | 20 +- packages/webapi/services/metrics.go | 6 +- packages/webapi/services/offledger.go | 6 - packages/webapi/services/registry.go | 4 +- packages/webapi/services/waspevmbackend.go | 7 +- packages/webapi/test/offledger_test.go | 2 +- packages/webapi/websocket/eventhandler.go | 8 +- .../webapi/websocket/eventhandler_test.go | 8 +- packages/webapi/websocket/service.go | 2 +- .../webapi/websocket/subscriptionvalidator.go | 28 - packages/webapi/websocket/websocket_test.go | 2 - tools/cluster/cluster.go | 6 +- tools/cluster/tests/access_nodes_test.go | 2 +- tools/cluster/tests/account_test.go | 2 +- tools/cluster/tests/advanced_account_test.go | 2 +- tools/cluster/tests/deploy_test.go | 2 +- tools/cluster/tests/env.go | 8 +- tools/cluster/tests/estimategas_test.go | 3 +- tools/cluster/tests/evm_jsonrpc_test.go | 4 +- tools/cluster/tests/missing_requests_test.go | 1 - .../cluster/tests/offledger_requests_test.go | 6 +- tools/cluster/tests/post_test.go | 6 +- tools/cluster/tests/pruning_test.go | 2 +- tools/cluster/tests/reboot_test.go | 2 +- tools/cluster/tests/spam_test.go | 6 +- tools/cluster/tests/transfer_test.go | 4 +- tools/cluster/tests/util.go | 2 +- tools/cluster/tests/validator_fees_test.go | 4 +- tools/cluster/tests/wasp-cli_rotation_test.go | 5 +- tools/wasp-cli/chain/accounts.go | 4 +- tools/wasp-cli/chain/activate.go | 5 +- tools/wasp-cli/chain/deploy.go | 2 +- tools/wasp-cli/chain/postrequest.go | 2 +- tools/wasp-cli/cli/cliclients/clients.go | 3 +- tools/wasp-cli/cli/config/config.go | 4 +- 61 files changed, 657 insertions(+), 741 deletions(-) diff --git a/clients/apiclient/README.md b/clients/apiclient/README.md index e8acef09e4..d9256f0cf0 100644 --- a/clients/apiclient/README.md +++ b/clients/apiclient/README.md @@ -26,7 +26,7 @@ go get golang.org/x/net/context Put the package under your project folder and add the following in import: ```golang -import "github.com/iotaledger/wasp/clients/apiclient" +import "github.com/iotaledger/wasp/v2/clients/apiclient" ``` To use a proxy, set the environment variable `HTTP_PROXY`: diff --git a/clients/apiclient/api_chains.go b/clients/apiclient/api_chains.go index c737c2cdeb..f2165c61db 100644 --- a/clients/apiclient/api_chains.go +++ b/clients/apiclient/api_chains.go @@ -19,13 +19,14 @@ import ( "strings" ) + // ChainsAPIService ChainsAPI service type ChainsAPIService service type ApiActivateChainRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - chainID string + chainID string } func (r ApiActivateChainRequest) Execute() (*http.Response, error) { @@ -35,24 +36,24 @@ func (r ApiActivateChainRequest) Execute() (*http.Response, error) { /* ActivateChain Activate a chain - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param chainID ChainID (Hex Address) - @return ApiActivateChainRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param chainID ChainID (Hex Address) + @return ApiActivateChainRequest */ func (a *ChainsAPIService) ActivateChain(ctx context.Context, chainID string) ApiActivateChainRequest { return ApiActivateChainRequest{ ApiService: a, - ctx: ctx, - chainID: chainID, + ctx: ctx, + chainID: chainID, } } // Execute executes the request func (a *ChainsAPIService) ActivateChainExecute(r ApiActivateChainRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.ActivateChain") @@ -127,8 +128,8 @@ func (a *ChainsAPIService) ActivateChainExecute(r ApiActivateChainRequest) (*htt newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -137,9 +138,9 @@ func (a *ChainsAPIService) ActivateChainExecute(r ApiActivateChainRequest) (*htt } type ApiAddAccessNodeRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - peer string + peer string } func (r ApiAddAccessNodeRequest) Execute() (*http.Response, error) { @@ -149,24 +150,24 @@ func (r ApiAddAccessNodeRequest) Execute() (*http.Response, error) { /* AddAccessNode Configure a trusted node to be an access node. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param peer Name or PubKey (hex) of the trusted peer - @return ApiAddAccessNodeRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param peer Name or PubKey (hex) of the trusted peer + @return ApiAddAccessNodeRequest */ func (a *ChainsAPIService) AddAccessNode(ctx context.Context, peer string) ApiAddAccessNodeRequest { return ApiAddAccessNodeRequest{ ApiService: a, - ctx: ctx, - peer: peer, + ctx: ctx, + peer: peer, } } // Execute executes the request func (a *ChainsAPIService) AddAccessNodeExecute(r ApiAddAccessNodeRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPut - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPut + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.AddAccessNode") @@ -241,8 +242,8 @@ func (a *ChainsAPIService) AddAccessNodeExecute(r ApiAddAccessNodeRequest) (*htt newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -251,8 +252,8 @@ func (a *ChainsAPIService) AddAccessNodeExecute(r ApiAddAccessNodeRequest) (*htt } type ApiCallViewRequest struct { - ctx context.Context - ApiService *ChainsAPIService + ctx context.Context + ApiService *ChainsAPIService contractCallViewRequest *ContractCallViewRequest } @@ -271,25 +272,24 @@ CallView Call a view function on a contract by Hname Execute a view call. Either use HName or Name properties. If both are supplied, HName are used. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiCallViewRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiCallViewRequest */ func (a *ChainsAPIService) CallView(ctx context.Context) ApiCallViewRequest { return ApiCallViewRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return []string +// @return []string func (a *ChainsAPIService) CallViewExecute(r ApiCallViewRequest) ([]string, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue []string + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []string ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.CallView") @@ -363,7 +363,7 @@ func (a *ChainsAPIService) CallViewExecute(r ApiCallViewRequest) ([]string, *htt } type ApiDeactivateChainRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService } @@ -374,22 +374,22 @@ func (r ApiDeactivateChainRequest) Execute() (*http.Response, error) { /* DeactivateChain Deactivate a chain - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiDeactivateChainRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiDeactivateChainRequest */ func (a *ChainsAPIService) DeactivateChain(ctx context.Context) ApiDeactivateChainRequest { return ApiDeactivateChainRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request func (a *ChainsAPIService) DeactivateChainExecute(r ApiDeactivateChainRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.DeactivateChain") @@ -463,8 +463,8 @@ func (a *ChainsAPIService) DeactivateChainExecute(r ApiDeactivateChainRequest) ( newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -473,7 +473,7 @@ func (a *ChainsAPIService) DeactivateChainExecute(r ApiDeactivateChainRequest) ( } type ApiDumpAccountsRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService } @@ -484,22 +484,22 @@ func (r ApiDumpAccountsRequest) Execute() (*http.Response, error) { /* DumpAccounts dump accounts information into a humanly-readable format - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiDumpAccountsRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiDumpAccountsRequest */ func (a *ChainsAPIService) DumpAccounts(ctx context.Context) ApiDumpAccountsRequest { return ApiDumpAccountsRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request func (a *ChainsAPIService) DumpAccountsExecute(r ApiDumpAccountsRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.DumpAccounts") @@ -573,8 +573,8 @@ func (a *ChainsAPIService) DumpAccountsExecute(r ApiDumpAccountsRequest) (*http. newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -583,9 +583,9 @@ func (a *ChainsAPIService) DumpAccountsExecute(r ApiDumpAccountsRequest) (*http. } type ApiEstimateGasOffledgerRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - request *EstimateGasRequestOffledger + request *EstimateGasRequestOffledger } // Request @@ -601,25 +601,24 @@ func (r ApiEstimateGasOffledgerRequest) Execute() (*ReceiptResponse, *http.Respo /* EstimateGasOffledger Estimates gas for a given off-ledger ISC request - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiEstimateGasOffledgerRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiEstimateGasOffledgerRequest */ func (a *ChainsAPIService) EstimateGasOffledger(ctx context.Context) ApiEstimateGasOffledgerRequest { return ApiEstimateGasOffledgerRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return ReceiptResponse +// @return ReceiptResponse func (a *ChainsAPIService) EstimateGasOffledgerExecute(r ApiEstimateGasOffledgerRequest) (*ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ReceiptResponse + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.EstimateGasOffledger") @@ -693,9 +692,9 @@ func (a *ChainsAPIService) EstimateGasOffledgerExecute(r ApiEstimateGasOffledger } type ApiEstimateGasOnledgerRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - request *EstimateGasRequestOnledger + request *EstimateGasRequestOnledger } // Request @@ -711,25 +710,24 @@ func (r ApiEstimateGasOnledgerRequest) Execute() (*ReceiptResponse, *http.Respon /* EstimateGasOnledger Estimates gas for a given on-ledger ISC request - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiEstimateGasOnledgerRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiEstimateGasOnledgerRequest */ func (a *ChainsAPIService) EstimateGasOnledger(ctx context.Context) ApiEstimateGasOnledgerRequest { return ApiEstimateGasOnledgerRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return ReceiptResponse +// @return ReceiptResponse func (a *ChainsAPIService) EstimateGasOnledgerExecute(r ApiEstimateGasOnledgerRequest) (*ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ReceiptResponse + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.EstimateGasOnledger") @@ -803,9 +801,9 @@ func (a *ChainsAPIService) EstimateGasOnledgerExecute(r ApiEstimateGasOnledgerRe } type ApiGetChainInfoRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - block *string + block *string } // Block index or trie root @@ -821,25 +819,24 @@ func (r ApiGetChainInfoRequest) Execute() (*ChainInfoResponse, *http.Response, e /* GetChainInfo Get information about a specific chain - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGetChainInfoRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGetChainInfoRequest */ func (a *ChainsAPIService) GetChainInfo(ctx context.Context) ApiGetChainInfoRequest { return ApiGetChainInfoRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return ChainInfoResponse +// @return ChainInfoResponse func (a *ChainsAPIService) GetChainInfoExecute(r ApiGetChainInfoRequest) (*ChainInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ChainInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ChainInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetChainInfo") @@ -911,9 +908,9 @@ func (a *ChainsAPIService) GetChainInfoExecute(r ApiGetChainInfoRequest) (*Chain } type ApiGetCommitteeInfoRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - block *string + block *string } // Block index or trie root @@ -929,25 +926,24 @@ func (r ApiGetCommitteeInfoRequest) Execute() (*CommitteeInfoResponse, *http.Res /* GetCommitteeInfo Get information about the deployed committee - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGetCommitteeInfoRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGetCommitteeInfoRequest */ func (a *ChainsAPIService) GetCommitteeInfo(ctx context.Context) ApiGetCommitteeInfoRequest { return ApiGetCommitteeInfoRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return CommitteeInfoResponse +// @return CommitteeInfoResponse func (a *ChainsAPIService) GetCommitteeInfoExecute(r ApiGetCommitteeInfoRequest) (*CommitteeInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *CommitteeInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *CommitteeInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetCommitteeInfo") @@ -1024,8 +1020,8 @@ func (a *ChainsAPIService) GetCommitteeInfoExecute(r ApiGetCommitteeInfoRequest) newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1043,9 +1039,9 @@ func (a *ChainsAPIService) GetCommitteeInfoExecute(r ApiGetCommitteeInfoRequest) } type ApiGetContractsRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - block *string + block *string } // Block index or trie root @@ -1061,25 +1057,24 @@ func (r ApiGetContractsRequest) Execute() ([]ContractInfoResponse, *http.Respons /* GetContracts Get all available chain contracts - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGetContractsRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGetContractsRequest */ func (a *ChainsAPIService) GetContracts(ctx context.Context) ApiGetContractsRequest { return ApiGetContractsRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return []ContractInfoResponse +// @return []ContractInfoResponse func (a *ChainsAPIService) GetContractsExecute(r ApiGetContractsRequest) ([]ContractInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue []ContractInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []ContractInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetContracts") @@ -1156,8 +1151,8 @@ func (a *ChainsAPIService) GetContractsExecute(r ApiGetContractsRequest) ([]Cont newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1175,7 +1170,7 @@ func (a *ChainsAPIService) GetContractsExecute(r ApiGetContractsRequest) ([]Cont } type ApiGetMempoolContentsRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService } @@ -1186,25 +1181,24 @@ func (r ApiGetMempoolContentsRequest) Execute() ([]int32, *http.Response, error) /* GetMempoolContents Get the contents of the mempool. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGetMempoolContentsRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGetMempoolContentsRequest */ func (a *ChainsAPIService) GetMempoolContents(ctx context.Context) ApiGetMempoolContentsRequest { return ApiGetMempoolContentsRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return []int32 +// @return []int32 func (a *ChainsAPIService) GetMempoolContentsExecute(r ApiGetMempoolContentsRequest) ([]int32, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue []int32 + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []int32 ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetMempoolContents") @@ -1278,8 +1272,8 @@ func (a *ChainsAPIService) GetMempoolContentsExecute(r ApiGetMempoolContentsRequ newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1297,9 +1291,9 @@ func (a *ChainsAPIService) GetMempoolContentsExecute(r ApiGetMempoolContentsRequ } type ApiGetReceiptRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - requestID string + requestID string } func (r ApiGetReceiptRequest) Execute() (*ReceiptResponse, *http.Response, error) { @@ -1309,27 +1303,26 @@ func (r ApiGetReceiptRequest) Execute() (*ReceiptResponse, *http.Response, error /* GetReceipt Get a receipt from a request ID - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param requestID RequestID (Hex) - @return ApiGetReceiptRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param requestID RequestID (Hex) + @return ApiGetReceiptRequest */ func (a *ChainsAPIService) GetReceipt(ctx context.Context, requestID string) ApiGetReceiptRequest { return ApiGetReceiptRequest{ ApiService: a, - ctx: ctx, - requestID: requestID, + ctx: ctx, + requestID: requestID, } } // Execute executes the request -// -// @return ReceiptResponse +// @return ReceiptResponse func (a *ChainsAPIService) GetReceiptExecute(r ApiGetReceiptRequest) (*ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ReceiptResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetReceipt") @@ -1399,9 +1392,9 @@ func (a *ChainsAPIService) GetReceiptExecute(r ApiGetReceiptRequest) (*ReceiptRe } type ApiGetStateValueRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - stateKey string + stateKey string } func (r ApiGetStateValueRequest) Execute() (*StateResponse, *http.Response, error) { @@ -1411,27 +1404,26 @@ func (r ApiGetStateValueRequest) Execute() (*StateResponse, *http.Response, erro /* GetStateValue Fetch the raw value associated with the given key in the chain state - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param stateKey State Key (Hex) - @return ApiGetStateValueRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param stateKey State Key (Hex) + @return ApiGetStateValueRequest */ func (a *ChainsAPIService) GetStateValue(ctx context.Context, stateKey string) ApiGetStateValueRequest { return ApiGetStateValueRequest{ ApiService: a, - ctx: ctx, - stateKey: stateKey, + ctx: ctx, + stateKey: stateKey, } } // Execute executes the request -// -// @return StateResponse +// @return StateResponse func (a *ChainsAPIService) GetStateValueExecute(r ApiGetStateValueRequest) (*StateResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *StateResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *StateResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.GetStateValue") @@ -1501,9 +1493,9 @@ func (a *ChainsAPIService) GetStateValueExecute(r ApiGetStateValueRequest) (*Sta } type ApiRemoveAccessNodeRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService - peer string + peer string } func (r ApiRemoveAccessNodeRequest) Execute() (*http.Response, error) { @@ -1513,24 +1505,24 @@ func (r ApiRemoveAccessNodeRequest) Execute() (*http.Response, error) { /* RemoveAccessNode Remove an access node. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param peer Name or PubKey (hex) of the trusted peer - @return ApiRemoveAccessNodeRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param peer Name or PubKey (hex) of the trusted peer + @return ApiRemoveAccessNodeRequest */ func (a *ChainsAPIService) RemoveAccessNode(ctx context.Context, peer string) ApiRemoveAccessNodeRequest { return ApiRemoveAccessNodeRequest{ ApiService: a, - ctx: ctx, - peer: peer, + ctx: ctx, + peer: peer, } } // Execute executes the request func (a *ChainsAPIService) RemoveAccessNodeExecute(r ApiRemoveAccessNodeRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodDelete - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodDelete + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.RemoveAccessNode") @@ -1605,8 +1597,8 @@ func (a *ChainsAPIService) RemoveAccessNodeExecute(r ApiRemoveAccessNodeRequest) newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -1615,8 +1607,8 @@ func (a *ChainsAPIService) RemoveAccessNodeExecute(r ApiRemoveAccessNodeRequest) } type ApiRotateChainRequest struct { - ctx context.Context - ApiService *ChainsAPIService + ctx context.Context + ApiService *ChainsAPIService rotateRequest *RotateChainRequest } @@ -1633,22 +1625,22 @@ func (r ApiRotateChainRequest) Execute() (*http.Response, error) { /* RotateChain Rotate a chain - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiRotateChainRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiRotateChainRequest */ func (a *ChainsAPIService) RotateChain(ctx context.Context) ApiRotateChainRequest { return ApiRotateChainRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request func (a *ChainsAPIService) RotateChainExecute(r ApiRotateChainRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.RotateChain") @@ -1724,8 +1716,8 @@ func (a *ChainsAPIService) RotateChainExecute(r ApiRotateChainRequest) (*http.Re newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -1734,9 +1726,9 @@ func (a *ChainsAPIService) RotateChainExecute(r ApiRotateChainRequest) (*http.Re } type ApiSetChainRecordRequest struct { - ctx context.Context - ApiService *ChainsAPIService - chainID string + ctx context.Context + ApiService *ChainsAPIService + chainID string chainRecord *ChainRecord } @@ -1753,23 +1745,24 @@ func (r ApiSetChainRecordRequest) Execute() (*http.Response, error) { /* SetChainRecord Sets the chain record. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param chainID ChainID (Hex Address) - @return ApiSetChainRecordRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param chainID ChainID (Hex Address) + @return ApiSetChainRecordRequest */ -func (a *ChainsAPIService) SetChainRecord(ctx context.Context) ApiSetChainRecordRequest { +func (a *ChainsAPIService) SetChainRecord(ctx context.Context, chainID string) ApiSetChainRecordRequest { return ApiSetChainRecordRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, + chainID: chainID, } } // Execute executes the request func (a *ChainsAPIService) SetChainRecordExecute(r ApiSetChainRecordRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.SetChainRecord") @@ -1849,8 +1842,8 @@ func (a *ChainsAPIService) SetChainRecordExecute(r ApiSetChainRecordRequest) (*h newErr.error = err.Error() return localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarHTTPResponse, newErr } @@ -1859,7 +1852,7 @@ func (a *ChainsAPIService) SetChainRecordExecute(r ApiSetChainRecordRequest) (*h } type ApiV1ChainEvmPostRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService } @@ -1870,22 +1863,22 @@ func (r ApiV1ChainEvmPostRequest) Execute() (*http.Response, error) { /* V1ChainEvmPost Ethereum JSON-RPC - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiV1ChainEvmPostRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiV1ChainEvmPostRequest */ func (a *ChainsAPIService) V1ChainEvmPost(ctx context.Context) ApiV1ChainEvmPostRequest { return ApiV1ChainEvmPostRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request func (a *ChainsAPIService) V1ChainEvmPostExecute(r ApiV1ChainEvmPostRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodPost - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodPost + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.V1ChainEvmPost") @@ -1945,7 +1938,7 @@ func (a *ChainsAPIService) V1ChainEvmPostExecute(r ApiV1ChainEvmPostRequest) (*h } type ApiV1ChainEvmWsGetRequest struct { - ctx context.Context + ctx context.Context ApiService *ChainsAPIService } @@ -1956,22 +1949,22 @@ func (r ApiV1ChainEvmWsGetRequest) Execute() (*http.Response, error) { /* V1ChainEvmWsGet Ethereum JSON-RPC (Websocket transport) - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiV1ChainEvmWsGetRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiV1ChainEvmWsGetRequest */ func (a *ChainsAPIService) V1ChainEvmWsGet(ctx context.Context) ApiV1ChainEvmWsGetRequest { return ApiV1ChainEvmWsGetRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request func (a *ChainsAPIService) V1ChainEvmWsGetExecute(r ApiV1ChainEvmWsGetRequest) (*http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.V1ChainEvmWsGet") @@ -2031,10 +2024,10 @@ func (a *ChainsAPIService) V1ChainEvmWsGetExecute(r ApiV1ChainEvmWsGetRequest) ( } type ApiWaitForRequestRequest struct { - ctx context.Context - ApiService *ChainsAPIService - requestID string - timeoutSeconds *int32 + ctx context.Context + ApiService *ChainsAPIService + requestID string + timeoutSeconds *int32 waitForL1Confirmation *bool } @@ -2057,27 +2050,26 @@ func (r ApiWaitForRequestRequest) Execute() (*ReceiptResponse, *http.Response, e /* WaitForRequest Wait until the given request has been processed by the node - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param requestID RequestID (Hex) - @return ApiWaitForRequestRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param requestID RequestID (Hex) + @return ApiWaitForRequestRequest */ func (a *ChainsAPIService) WaitForRequest(ctx context.Context, requestID string) ApiWaitForRequestRequest { return ApiWaitForRequestRequest{ ApiService: a, - ctx: ctx, - requestID: requestID, + ctx: ctx, + requestID: requestID, } } // Execute executes the request -// -// @return ReceiptResponse +// @return ReceiptResponse func (a *ChainsAPIService) WaitForRequestExecute(r ApiWaitForRequestRequest) (*ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ReceiptResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ChainsAPIService.WaitForRequest") diff --git a/clients/apiclient/api_corecontracts.go b/clients/apiclient/api_corecontracts.go index f55495aac1..67d7fae555 100644 --- a/clients/apiclient/api_corecontracts.go +++ b/clients/apiclient/api_corecontracts.go @@ -19,14 +19,15 @@ import ( "strings" ) + // CorecontractsAPIService CorecontractsAPI service type CorecontractsAPIService service type ApiAccountsGetAccountBalanceRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - agentID string - block *string + agentID string + block *string } // Block index or trie root @@ -42,27 +43,26 @@ func (r ApiAccountsGetAccountBalanceRequest) Execute() (*AssetsResponse, *http.R /* AccountsGetAccountBalance Get all assets belonging to an account - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param agentID AgentID (Hex Address for L1 accounts | Hex for EVM) - @return ApiAccountsGetAccountBalanceRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param agentID AgentID (Hex Address for L1 accounts | Hex for EVM) + @return ApiAccountsGetAccountBalanceRequest */ func (a *CorecontractsAPIService) AccountsGetAccountBalance(ctx context.Context, agentID string) ApiAccountsGetAccountBalanceRequest { return ApiAccountsGetAccountBalanceRequest{ ApiService: a, - ctx: ctx, - agentID: agentID, + ctx: ctx, + agentID: agentID, } } // Execute executes the request -// -// @return AssetsResponse +// @return AssetsResponse func (a *CorecontractsAPIService) AccountsGetAccountBalanceExecute(r ApiAccountsGetAccountBalanceRequest) (*AssetsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *AssetsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *AssetsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.AccountsGetAccountBalance") @@ -126,8 +126,8 @@ func (a *CorecontractsAPIService) AccountsGetAccountBalanceExecute(r ApiAccounts newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -145,10 +145,10 @@ func (a *CorecontractsAPIService) AccountsGetAccountBalanceExecute(r ApiAccounts } type ApiAccountsGetAccountNonceRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - agentID string - block *string + agentID string + block *string } // Block index or trie root @@ -164,27 +164,26 @@ func (r ApiAccountsGetAccountNonceRequest) Execute() (*AccountNonceResponse, *ht /* AccountsGetAccountNonce Get the current nonce of an account - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param agentID AgentID (Hex Address for L1 accounts | Hex for EVM) - @return ApiAccountsGetAccountNonceRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param agentID AgentID (Hex Address for L1 accounts | Hex for EVM) + @return ApiAccountsGetAccountNonceRequest */ func (a *CorecontractsAPIService) AccountsGetAccountNonce(ctx context.Context, agentID string) ApiAccountsGetAccountNonceRequest { return ApiAccountsGetAccountNonceRequest{ ApiService: a, - ctx: ctx, - agentID: agentID, + ctx: ctx, + agentID: agentID, } } // Execute executes the request -// -// @return AccountNonceResponse +// @return AccountNonceResponse func (a *CorecontractsAPIService) AccountsGetAccountNonceExecute(r ApiAccountsGetAccountNonceRequest) (*AccountNonceResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *AccountNonceResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *AccountNonceResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.AccountsGetAccountNonce") @@ -248,8 +247,8 @@ func (a *CorecontractsAPIService) AccountsGetAccountNonceExecute(r ApiAccountsGe newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -267,9 +266,9 @@ func (a *CorecontractsAPIService) AccountsGetAccountNonceExecute(r ApiAccountsGe } type ApiAccountsGetTotalAssetsRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -285,25 +284,24 @@ func (r ApiAccountsGetTotalAssetsRequest) Execute() (*AssetsResponse, *http.Resp /* AccountsGetTotalAssets Get all stored assets - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiAccountsGetTotalAssetsRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiAccountsGetTotalAssetsRequest */ func (a *CorecontractsAPIService) AccountsGetTotalAssets(ctx context.Context) ApiAccountsGetTotalAssetsRequest { return ApiAccountsGetTotalAssetsRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return AssetsResponse +// @return AssetsResponse func (a *CorecontractsAPIService) AccountsGetTotalAssetsExecute(r ApiAccountsGetTotalAssetsRequest) (*AssetsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *AssetsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *AssetsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.AccountsGetTotalAssets") @@ -366,8 +364,8 @@ func (a *CorecontractsAPIService) AccountsGetTotalAssetsExecute(r ApiAccountsGet newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -385,10 +383,10 @@ func (a *CorecontractsAPIService) AccountsGetTotalAssetsExecute(r ApiAccountsGet } type ApiBlocklogGetBlockInfoRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService blockIndex uint32 - block *string + block *string } // Block index or trie root @@ -404,27 +402,26 @@ func (r ApiBlocklogGetBlockInfoRequest) Execute() (*BlockInfoResponse, *http.Res /* BlocklogGetBlockInfo Get the block info of a certain block index - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param blockIndex BlockIndex (uint32) - @return ApiBlocklogGetBlockInfoRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param blockIndex BlockIndex (uint32) + @return ApiBlocklogGetBlockInfoRequest */ func (a *CorecontractsAPIService) BlocklogGetBlockInfo(ctx context.Context, blockIndex uint32) ApiBlocklogGetBlockInfoRequest { return ApiBlocklogGetBlockInfoRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, blockIndex: blockIndex, } } // Execute executes the request -// -// @return BlockInfoResponse +// @return BlockInfoResponse func (a *CorecontractsAPIService) BlocklogGetBlockInfoExecute(r ApiBlocklogGetBlockInfoRequest) (*BlockInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *BlockInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *BlockInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetBlockInfo") @@ -491,8 +488,8 @@ func (a *CorecontractsAPIService) BlocklogGetBlockInfoExecute(r ApiBlocklogGetBl newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -510,9 +507,9 @@ func (a *CorecontractsAPIService) BlocklogGetBlockInfoExecute(r ApiBlocklogGetBl } type ApiBlocklogGetControlAddressesRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -528,25 +525,24 @@ func (r ApiBlocklogGetControlAddressesRequest) Execute() (*ControlAddressesRespo /* BlocklogGetControlAddresses Get the control addresses - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiBlocklogGetControlAddressesRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiBlocklogGetControlAddressesRequest */ func (a *CorecontractsAPIService) BlocklogGetControlAddresses(ctx context.Context) ApiBlocklogGetControlAddressesRequest { return ApiBlocklogGetControlAddressesRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return ControlAddressesResponse +// @return ControlAddressesResponse func (a *CorecontractsAPIService) BlocklogGetControlAddressesExecute(r ApiBlocklogGetControlAddressesRequest) (*ControlAddressesResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ControlAddressesResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ControlAddressesResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetControlAddresses") @@ -609,8 +605,8 @@ func (a *CorecontractsAPIService) BlocklogGetControlAddressesExecute(r ApiBlockl newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -628,10 +624,10 @@ func (a *CorecontractsAPIService) BlocklogGetControlAddressesExecute(r ApiBlockl } type ApiBlocklogGetEventsOfBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService blockIndex uint32 - block *string + block *string } // Block index or trie root @@ -647,27 +643,26 @@ func (r ApiBlocklogGetEventsOfBlockRequest) Execute() (*EventsResponse, *http.Re /* BlocklogGetEventsOfBlock Get events of a block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param blockIndex BlockIndex (uint32) - @return ApiBlocklogGetEventsOfBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param blockIndex BlockIndex (uint32) + @return ApiBlocklogGetEventsOfBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetEventsOfBlock(ctx context.Context, blockIndex uint32) ApiBlocklogGetEventsOfBlockRequest { return ApiBlocklogGetEventsOfBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, blockIndex: blockIndex, } } // Execute executes the request -// -// @return EventsResponse +// @return EventsResponse func (a *CorecontractsAPIService) BlocklogGetEventsOfBlockExecute(r ApiBlocklogGetEventsOfBlockRequest) (*EventsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *EventsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *EventsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetEventsOfBlock") @@ -734,8 +729,8 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfBlockExecute(r ApiBlocklogG newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -753,9 +748,9 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfBlockExecute(r ApiBlocklogG } type ApiBlocklogGetEventsOfLatestBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -771,25 +766,24 @@ func (r ApiBlocklogGetEventsOfLatestBlockRequest) Execute() (*EventsResponse, *h /* BlocklogGetEventsOfLatestBlock Get events of the latest block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiBlocklogGetEventsOfLatestBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiBlocklogGetEventsOfLatestBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetEventsOfLatestBlock(ctx context.Context) ApiBlocklogGetEventsOfLatestBlockRequest { return ApiBlocklogGetEventsOfLatestBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return EventsResponse +// @return EventsResponse func (a *CorecontractsAPIService) BlocklogGetEventsOfLatestBlockExecute(r ApiBlocklogGetEventsOfLatestBlockRequest) (*EventsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *EventsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *EventsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetEventsOfLatestBlock") @@ -852,8 +846,8 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfLatestBlockExecute(r ApiBlo newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -871,10 +865,10 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfLatestBlockExecute(r ApiBlo } type ApiBlocklogGetEventsOfRequestRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - requestID string - block *string + requestID string + block *string } // Block index or trie root @@ -890,27 +884,26 @@ func (r ApiBlocklogGetEventsOfRequestRequest) Execute() (*EventsResponse, *http. /* BlocklogGetEventsOfRequest Get events of a request - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param requestID RequestID (Hex) - @return ApiBlocklogGetEventsOfRequestRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param requestID RequestID (Hex) + @return ApiBlocklogGetEventsOfRequestRequest */ func (a *CorecontractsAPIService) BlocklogGetEventsOfRequest(ctx context.Context, requestID string) ApiBlocklogGetEventsOfRequestRequest { return ApiBlocklogGetEventsOfRequestRequest{ ApiService: a, - ctx: ctx, - requestID: requestID, + ctx: ctx, + requestID: requestID, } } // Execute executes the request -// -// @return EventsResponse +// @return EventsResponse func (a *CorecontractsAPIService) BlocklogGetEventsOfRequestExecute(r ApiBlocklogGetEventsOfRequestRequest) (*EventsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *EventsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *EventsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetEventsOfRequest") @@ -974,8 +967,8 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfRequestExecute(r ApiBlocklo newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -993,9 +986,9 @@ func (a *CorecontractsAPIService) BlocklogGetEventsOfRequestExecute(r ApiBlocklo } type ApiBlocklogGetLatestBlockInfoRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -1011,25 +1004,24 @@ func (r ApiBlocklogGetLatestBlockInfoRequest) Execute() (*BlockInfoResponse, *ht /* BlocklogGetLatestBlockInfo Get the block info of the latest block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiBlocklogGetLatestBlockInfoRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiBlocklogGetLatestBlockInfoRequest */ func (a *CorecontractsAPIService) BlocklogGetLatestBlockInfo(ctx context.Context) ApiBlocklogGetLatestBlockInfoRequest { return ApiBlocklogGetLatestBlockInfoRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return BlockInfoResponse +// @return BlockInfoResponse func (a *CorecontractsAPIService) BlocklogGetLatestBlockInfoExecute(r ApiBlocklogGetLatestBlockInfoRequest) (*BlockInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *BlockInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *BlockInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetLatestBlockInfo") @@ -1092,8 +1084,8 @@ func (a *CorecontractsAPIService) BlocklogGetLatestBlockInfoExecute(r ApiBlocklo newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1111,10 +1103,10 @@ func (a *CorecontractsAPIService) BlocklogGetLatestBlockInfoExecute(r ApiBlocklo } type ApiBlocklogGetRequestIDsForBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService blockIndex uint32 - block *string + block *string } // Block index or trie root @@ -1130,27 +1122,26 @@ func (r ApiBlocklogGetRequestIDsForBlockRequest) Execute() (*RequestIDsResponse, /* BlocklogGetRequestIDsForBlock Get the request ids for a certain block index - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param blockIndex BlockIndex (uint32) - @return ApiBlocklogGetRequestIDsForBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param blockIndex BlockIndex (uint32) + @return ApiBlocklogGetRequestIDsForBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForBlock(ctx context.Context, blockIndex uint32) ApiBlocklogGetRequestIDsForBlockRequest { return ApiBlocklogGetRequestIDsForBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, blockIndex: blockIndex, } } // Execute executes the request -// -// @return RequestIDsResponse +// @return RequestIDsResponse func (a *CorecontractsAPIService) BlocklogGetRequestIDsForBlockExecute(r ApiBlocklogGetRequestIDsForBlockRequest) (*RequestIDsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *RequestIDsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *RequestIDsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestIDsForBlock") @@ -1217,8 +1208,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForBlockExecute(r ApiBloc newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1236,9 +1227,9 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForBlockExecute(r ApiBloc } type ApiBlocklogGetRequestIDsForLatestBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -1254,25 +1245,24 @@ func (r ApiBlocklogGetRequestIDsForLatestBlockRequest) Execute() (*RequestIDsRes /* BlocklogGetRequestIDsForLatestBlock Get the request ids for the latest block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiBlocklogGetRequestIDsForLatestBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiBlocklogGetRequestIDsForLatestBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForLatestBlock(ctx context.Context) ApiBlocklogGetRequestIDsForLatestBlockRequest { return ApiBlocklogGetRequestIDsForLatestBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return RequestIDsResponse +// @return RequestIDsResponse func (a *CorecontractsAPIService) BlocklogGetRequestIDsForLatestBlockExecute(r ApiBlocklogGetRequestIDsForLatestBlockRequest) (*RequestIDsResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *RequestIDsResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *RequestIDsResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestIDsForLatestBlock") @@ -1335,8 +1325,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForLatestBlockExecute(r A newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1354,10 +1344,10 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIDsForLatestBlockExecute(r A } type ApiBlocklogGetRequestIsProcessedRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - requestID string - block *string + requestID string + block *string } // Block index or trie root @@ -1373,27 +1363,26 @@ func (r ApiBlocklogGetRequestIsProcessedRequest) Execute() (*RequestProcessedRes /* BlocklogGetRequestIsProcessed Get the request processing status - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param requestID RequestID (Hex) - @return ApiBlocklogGetRequestIsProcessedRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param requestID RequestID (Hex) + @return ApiBlocklogGetRequestIsProcessedRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestIsProcessed(ctx context.Context, requestID string) ApiBlocklogGetRequestIsProcessedRequest { return ApiBlocklogGetRequestIsProcessedRequest{ ApiService: a, - ctx: ctx, - requestID: requestID, + ctx: ctx, + requestID: requestID, } } // Execute executes the request -// -// @return RequestProcessedResponse +// @return RequestProcessedResponse func (a *CorecontractsAPIService) BlocklogGetRequestIsProcessedExecute(r ApiBlocklogGetRequestIsProcessedRequest) (*RequestProcessedResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *RequestProcessedResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *RequestProcessedResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestIsProcessed") @@ -1457,8 +1446,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIsProcessedExecute(r ApiBloc newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1476,10 +1465,10 @@ func (a *CorecontractsAPIService) BlocklogGetRequestIsProcessedExecute(r ApiBloc } type ApiBlocklogGetRequestReceiptRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - requestID string - block *string + requestID string + block *string } // Block index or trie root @@ -1495,27 +1484,26 @@ func (r ApiBlocklogGetRequestReceiptRequest) Execute() (*ReceiptResponse, *http. /* BlocklogGetRequestReceipt Get the receipt of a certain request id - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param requestID RequestID (Hex) - @return ApiBlocklogGetRequestReceiptRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param requestID RequestID (Hex) + @return ApiBlocklogGetRequestReceiptRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestReceipt(ctx context.Context, requestID string) ApiBlocklogGetRequestReceiptRequest { return ApiBlocklogGetRequestReceiptRequest{ ApiService: a, - ctx: ctx, - requestID: requestID, + ctx: ctx, + requestID: requestID, } } // Execute executes the request -// -// @return ReceiptResponse +// @return ReceiptResponse func (a *CorecontractsAPIService) BlocklogGetRequestReceiptExecute(r ApiBlocklogGetRequestReceiptRequest) (*ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ReceiptResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestReceipt") @@ -1579,8 +1567,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptExecute(r ApiBlocklog newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1598,10 +1586,10 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptExecute(r ApiBlocklog } type ApiBlocklogGetRequestReceiptsOfBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService blockIndex uint32 - block *string + block *string } // Block index or trie root @@ -1617,27 +1605,26 @@ func (r ApiBlocklogGetRequestReceiptsOfBlockRequest) Execute() ([]ReceiptRespons /* BlocklogGetRequestReceiptsOfBlock Get all receipts of a certain block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param blockIndex BlockIndex (uint32) - @return ApiBlocklogGetRequestReceiptsOfBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param blockIndex BlockIndex (uint32) + @return ApiBlocklogGetRequestReceiptsOfBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfBlock(ctx context.Context, blockIndex uint32) ApiBlocklogGetRequestReceiptsOfBlockRequest { return ApiBlocklogGetRequestReceiptsOfBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, blockIndex: blockIndex, } } // Execute executes the request -// -// @return []ReceiptResponse +// @return []ReceiptResponse func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfBlockExecute(r ApiBlocklogGetRequestReceiptsOfBlockRequest) ([]ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue []ReceiptResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestReceiptsOfBlock") @@ -1704,8 +1691,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfBlockExecute(r Api newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1723,9 +1710,9 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfBlockExecute(r Api } type ApiBlocklogGetRequestReceiptsOfLatestBlockRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -1741,25 +1728,24 @@ func (r ApiBlocklogGetRequestReceiptsOfLatestBlockRequest) Execute() ([]ReceiptR /* BlocklogGetRequestReceiptsOfLatestBlock Get all receipts of the latest block - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiBlocklogGetRequestReceiptsOfLatestBlockRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiBlocklogGetRequestReceiptsOfLatestBlockRequest */ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfLatestBlock(ctx context.Context) ApiBlocklogGetRequestReceiptsOfLatestBlockRequest { return ApiBlocklogGetRequestReceiptsOfLatestBlockRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return []ReceiptResponse +// @return []ReceiptResponse func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfLatestBlockExecute(r ApiBlocklogGetRequestReceiptsOfLatestBlockRequest) ([]ReceiptResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue []ReceiptResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue []ReceiptResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.BlocklogGetRequestReceiptsOfLatestBlock") @@ -1822,8 +1808,8 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfLatestBlockExecute newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1841,12 +1827,12 @@ func (a *CorecontractsAPIService) BlocklogGetRequestReceiptsOfLatestBlockExecute } type ApiErrorsGetErrorMessageFormatRequest struct { - ctx context.Context - ApiService *CorecontractsAPIService - chainID string + ctx context.Context + ApiService *CorecontractsAPIService + chainID string contractHname string - errorID uint32 - block *string + errorID uint32 + block *string } // Block index or trie root @@ -1862,30 +1848,30 @@ func (r ApiErrorsGetErrorMessageFormatRequest) Execute() (*ErrorMessageFormatRes /* ErrorsGetErrorMessageFormat Get the error message format of a specific error id - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @param chainID ChainID (Hex Address) - @param contractHname Contract (Hname as Hex) - @param errorID Error Id (uint16) - @return ApiErrorsGetErrorMessageFormatRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @param chainID ChainID (Hex Address) + @param contractHname Contract (Hname as Hex) + @param errorID Error Id (uint16) + @return ApiErrorsGetErrorMessageFormatRequest */ -func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormat(ctx context.Context, contractHname string, errorID uint32) ApiErrorsGetErrorMessageFormatRequest { +func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormat(ctx context.Context, chainID string, contractHname string, errorID uint32) ApiErrorsGetErrorMessageFormatRequest { return ApiErrorsGetErrorMessageFormatRequest{ - ApiService: a, - ctx: ctx, + ApiService: a, + ctx: ctx, + chainID: chainID, contractHname: contractHname, - errorID: errorID, + errorID: errorID, } } // Execute executes the request -// -// @return ErrorMessageFormatResponse +// @return ErrorMessageFormatResponse func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormatExecute(r ApiErrorsGetErrorMessageFormatRequest) (*ErrorMessageFormatResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *ErrorMessageFormatResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *ErrorMessageFormatResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.ErrorsGetErrorMessageFormat") @@ -1954,8 +1940,8 @@ func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormatExecute(r ApiErrors newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -1973,9 +1959,9 @@ func (a *CorecontractsAPIService) ErrorsGetErrorMessageFormatExecute(r ApiErrors } type ApiGovernanceGetChainAdminRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -1993,25 +1979,24 @@ GovernanceGetChainAdmin Get the chain admin Returns the chain admin - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGovernanceGetChainAdminRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGovernanceGetChainAdminRequest */ func (a *CorecontractsAPIService) GovernanceGetChainAdmin(ctx context.Context) ApiGovernanceGetChainAdminRequest { return ApiGovernanceGetChainAdminRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return GovChainAdminResponse +// @return GovChainAdminResponse func (a *CorecontractsAPIService) GovernanceGetChainAdminExecute(r ApiGovernanceGetChainAdminRequest) (*GovChainAdminResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *GovChainAdminResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *GovChainAdminResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.GovernanceGetChainAdmin") @@ -2074,8 +2059,8 @@ func (a *CorecontractsAPIService) GovernanceGetChainAdminExecute(r ApiGovernance newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -2093,9 +2078,9 @@ func (a *CorecontractsAPIService) GovernanceGetChainAdminExecute(r ApiGovernance } type ApiGovernanceGetChainInfoRequest struct { - ctx context.Context + ctx context.Context ApiService *CorecontractsAPIService - block *string + block *string } // Block index or trie root @@ -2113,25 +2098,24 @@ GovernanceGetChainInfo Get the chain info If you are using the common API functions, you most likely rather want to use '/v1/chains/:chainID' to get information about a chain. - @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). - @return ApiGovernanceGetChainInfoRequest + @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiGovernanceGetChainInfoRequest */ func (a *CorecontractsAPIService) GovernanceGetChainInfo(ctx context.Context) ApiGovernanceGetChainInfoRequest { return ApiGovernanceGetChainInfoRequest{ ApiService: a, - ctx: ctx, + ctx: ctx, } } // Execute executes the request -// -// @return GovChainInfoResponse +// @return GovChainInfoResponse func (a *CorecontractsAPIService) GovernanceGetChainInfoExecute(r ApiGovernanceGetChainInfoRequest) (*GovChainInfoResponse, *http.Response, error) { var ( - localVarHTTPMethod = http.MethodGet - localVarPostBody interface{} - formFiles []formFile - localVarReturnValue *GovChainInfoResponse + localVarHTTPMethod = http.MethodGet + localVarPostBody interface{} + formFiles []formFile + localVarReturnValue *GovChainInfoResponse ) localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "CorecontractsAPIService.GovernanceGetChainInfo") @@ -2194,8 +2178,8 @@ func (a *CorecontractsAPIService) GovernanceGetChainInfoExecute(r ApiGovernanceG newErr.error = err.Error() return localVarReturnValue, localVarHTTPResponse, newErr } - newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) - newErr.model = v + newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v) + newErr.model = v } return localVarReturnValue, localVarHTTPResponse, newErr } diff --git a/clients/apiclient/generate_client.sh b/clients/apiclient/generate_client.sh index 46fd616b01..6194e7d8aa 100755 --- a/clients/apiclient/generate_client.sh +++ b/clients/apiclient/generate_client.sh @@ -75,7 +75,7 @@ sed -i "/uint32/! s/NullableInt /nullableIntUnused /g" "$SCRIPTPATH/utils.go" OBSOLETE_FILES=$(comm -23 <(sort /tmp/prev_openapi_generator_files) <(sort $SCRIPTPATH/.openapi-generator/FILES)) if [ ! -z "$OBSOLETE_FILES" ]; then DELETED_FILES_DIR=/tmp/openapi_generator_deleted_files_$(date +%F_%H-%M-%S) - + echo "Deleting obsolete files - moving them to $DELETED_FILES_DIR:" echo $OBSOLETE_FILES ( diff --git a/clients/apiclient/model_chain_info_response.go b/clients/apiclient/model_chain_info_response.go index b3c2d4c8a7..151af22f54 100644 --- a/clients/apiclient/model_chain_info_response.go +++ b/clients/apiclient/model_chain_info_response.go @@ -11,8 +11,8 @@ API version: 0 package apiclient import ( - "bytes" "encoding/json" + "bytes" "fmt" ) @@ -26,11 +26,11 @@ type ChainInfoResponse struct { // ChainID (Hex Address) ChainID string `json:"chainID"` // The EVM chain ID - EvmChainId uint32 `json:"evmChainId"` + EvmChainId uint32 `json:"evmChainId"` GasFeePolicy FeePolicy `json:"gasFeePolicy"` - GasLimits Limits `json:"gasLimits"` + GasLimits Limits `json:"gasLimits"` // Whether or not the chain is active - IsActive bool `json:"isActive"` + IsActive bool `json:"isActive"` Metadata PublicChainMetadata `json:"metadata"` // The fully qualified public url leading to the chains metadata PublicURL string `json:"publicURL"` @@ -42,7 +42,7 @@ type _ChainInfoResponse ChainInfoResponse // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewChainInfoResponse(chainAdmin string, evmChainId uint32, gasFeePolicy FeePolicy, gasLimits Limits, isActive bool, metadata PublicChainMetadata, publicURL string) *ChainInfoResponse { +func NewChainInfoResponse(chainAdmin string, chainID string, evmChainId uint32, gasFeePolicy FeePolicy, gasLimits Limits, isActive bool, metadata PublicChainMetadata, publicURL string) *ChainInfoResponse { this := ChainInfoResponse{} this.ChainAdmin = chainAdmin this.ChainID = chainID @@ -256,7 +256,7 @@ func (o *ChainInfoResponse) SetPublicURL(v string) { } func (o ChainInfoResponse) MarshalJSON() ([]byte, error) { - toSerialize, err := o.ToMap() + toSerialize,err := o.ToMap() if err != nil { return []byte{}, err } @@ -296,10 +296,10 @@ func (o *ChainInfoResponse) UnmarshalJSON(data []byte) (err error) { err = json.Unmarshal(data, &allProperties) if err != nil { - return err + return err; } - for _, requiredProperty := range requiredProperties { + for _, requiredProperty := range(requiredProperties) { if _, exists := allProperties[requiredProperty]; !exists { return fmt.Errorf("no value given for required property %v", requiredProperty) } @@ -355,3 +355,5 @@ func (v *NullableChainInfoResponse) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } + + diff --git a/clients/apiclient/model_committee_info_response.go b/clients/apiclient/model_committee_info_response.go index 6cfd0b1388..29ecd44ec1 100644 --- a/clients/apiclient/model_committee_info_response.go +++ b/clients/apiclient/model_committee_info_response.go @@ -11,8 +11,8 @@ API version: 0 package apiclient import ( - "bytes" "encoding/json" + "bytes" "fmt" ) @@ -31,7 +31,7 @@ type CommitteeInfoResponse struct { ChainId string `json:"chainId"` // A list of all committee nodes and their peering info. CommitteeNodes []CommitteeNode `json:"committeeNodes"` - StateAddress string `json:"stateAddress"` + StateAddress string `json:"stateAddress"` } type _CommitteeInfoResponse CommitteeInfoResponse @@ -40,7 +40,7 @@ type _CommitteeInfoResponse CommitteeInfoResponse // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewCommitteeInfoResponse(accessNodes []CommitteeNode, active bool, candidateNodes []CommitteeNode, committeeNodes []CommitteeNode, stateAddress string) *CommitteeInfoResponse { +func NewCommitteeInfoResponse(accessNodes []CommitteeNode, active bool, candidateNodes []CommitteeNode, chainId string, committeeNodes []CommitteeNode, stateAddress string) *CommitteeInfoResponse { this := CommitteeInfoResponse{} this.AccessNodes = accessNodes this.Active = active @@ -204,7 +204,7 @@ func (o *CommitteeInfoResponse) SetStateAddress(v string) { } func (o CommitteeInfoResponse) MarshalJSON() ([]byte, error) { - toSerialize, err := o.ToMap() + toSerialize,err := o.ToMap() if err != nil { return []byte{}, err } @@ -240,10 +240,10 @@ func (o *CommitteeInfoResponse) UnmarshalJSON(data []byte) (err error) { err = json.Unmarshal(data, &allProperties) if err != nil { - return err + return err; } - for _, requiredProperty := range requiredProperties { + for _, requiredProperty := range(requiredProperties) { if _, exists := allProperties[requiredProperty]; !exists { return fmt.Errorf("no value given for required property %v", requiredProperty) } @@ -299,3 +299,5 @@ func (v *NullableCommitteeInfoResponse) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } + + diff --git a/clients/apiclient/model_gov_chain_info_response.go b/clients/apiclient/model_gov_chain_info_response.go index 66ae167125..ed7bc48d08 100644 --- a/clients/apiclient/model_gov_chain_info_response.go +++ b/clients/apiclient/model_gov_chain_info_response.go @@ -11,8 +11,8 @@ API version: 0 package apiclient import ( - "bytes" "encoding/json" + "bytes" "fmt" ) @@ -24,10 +24,10 @@ type GovChainInfoResponse struct { // The chain admin address (Hex Address). ChainAdmin string `json:"chainAdmin"` // ChainID (Hex Address). - ChainID string `json:"chainID"` - GasFeePolicy FeePolicy `json:"gasFeePolicy"` - GasLimits Limits `json:"gasLimits"` - Metadata GovPublicChainMetadata `json:"metadata"` + ChainID string `json:"chainID"` + GasFeePolicy FeePolicy `json:"gasFeePolicy"` + GasLimits Limits `json:"gasLimits"` + Metadata GovPublicChainMetadata `json:"metadata"` // The fully qualified public url leading to the chains metadata PublicURL string `json:"publicURL"` } @@ -38,7 +38,7 @@ type _GovChainInfoResponse GovChainInfoResponse // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewGovChainInfoResponse(chainAdmin string, gasFeePolicy FeePolicy, gasLimits Limits, metadata GovPublicChainMetadata, publicURL string) *GovChainInfoResponse { +func NewGovChainInfoResponse(chainAdmin string, chainID string, gasFeePolicy FeePolicy, gasLimits Limits, metadata GovPublicChainMetadata, publicURL string) *GovChainInfoResponse { this := GovChainInfoResponse{} this.ChainAdmin = chainAdmin this.ChainID = chainID @@ -202,7 +202,7 @@ func (o *GovChainInfoResponse) SetPublicURL(v string) { } func (o GovChainInfoResponse) MarshalJSON() ([]byte, error) { - toSerialize, err := o.ToMap() + toSerialize,err := o.ToMap() if err != nil { return []byte{}, err } @@ -238,10 +238,10 @@ func (o *GovChainInfoResponse) UnmarshalJSON(data []byte) (err error) { err = json.Unmarshal(data, &allProperties) if err != nil { - return err + return err; } - for _, requiredProperty := range requiredProperties { + for _, requiredProperty := range(requiredProperties) { if _, exists := allProperties[requiredProperty]; !exists { return fmt.Errorf("no value given for required property %v", requiredProperty) } @@ -297,3 +297,5 @@ func (v *NullableGovChainInfoResponse) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } + + diff --git a/clients/apiclient/model_request_processed_response.go b/clients/apiclient/model_request_processed_response.go index 4c1fcb098f..2b4054dfef 100644 --- a/clients/apiclient/model_request_processed_response.go +++ b/clients/apiclient/model_request_processed_response.go @@ -11,8 +11,8 @@ API version: 0 package apiclient import ( - "bytes" "encoding/json" + "bytes" "fmt" ) @@ -21,9 +21,9 @@ var _ MappedNullable = &RequestProcessedResponse{} // RequestProcessedResponse struct for RequestProcessedResponse type RequestProcessedResponse struct { - ChainId string `json:"chainId"` - IsProcessed bool `json:"isProcessed"` - RequestId string `json:"requestId"` + ChainId string `json:"chainId"` + IsProcessed bool `json:"isProcessed"` + RequestId string `json:"requestId"` } type _RequestProcessedResponse RequestProcessedResponse @@ -32,7 +32,7 @@ type _RequestProcessedResponse RequestProcessedResponse // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewRequestProcessedResponse(isProcessed bool, requestId string) *RequestProcessedResponse { +func NewRequestProcessedResponse(chainId string, isProcessed bool, requestId string) *RequestProcessedResponse { this := RequestProcessedResponse{} this.ChainId = chainId this.IsProcessed = isProcessed @@ -121,7 +121,7 @@ func (o *RequestProcessedResponse) SetRequestId(v string) { } func (o RequestProcessedResponse) MarshalJSON() ([]byte, error) { - toSerialize, err := o.ToMap() + toSerialize,err := o.ToMap() if err != nil { return []byte{}, err } @@ -151,10 +151,10 @@ func (o *RequestProcessedResponse) UnmarshalJSON(data []byte) (err error) { err = json.Unmarshal(data, &allProperties) if err != nil { - return err + return err; } - for _, requiredProperty := range requiredProperties { + for _, requiredProperty := range(requiredProperties) { if _, exists := allProperties[requiredProperty]; !exists { return fmt.Errorf("no value given for required property %v", requiredProperty) } @@ -210,3 +210,5 @@ func (v *NullableRequestProcessedResponse) UnmarshalJSON(src []byte) error { v.isSet = true return json.Unmarshal(src, &v.value) } + + diff --git a/clients/chainclient/chainclient.go b/clients/chainclient/chainclient.go index b48214aeb6..fa7c05c0c9 100644 --- a/clients/chainclient/chainclient.go +++ b/clients/chainclient/chainclient.go @@ -189,7 +189,7 @@ func (c *Client) PostOffLedgerRequest( } par.Nonce = nonce } - req := isc.NewOffLedgerRequest(c.ChainID, msg, par.Nonce, par.GetL2GasBudget()) + req := isc.NewOffLedgerRequest(msg, par.Nonce, par.GetL2GasBudget()) req.WithAllowance(par.Allowance) req.WithNonce(par.Nonce) signed := req.Sign(c.KeyPair) diff --git a/clients/multiclient/chain_record.go b/clients/multiclient/chain_record.go index f9f250839d..d498d896dc 100644 --- a/clients/multiclient/chain_record.go +++ b/clients/multiclient/chain_record.go @@ -16,7 +16,7 @@ func (m *MultiClient) PutChainRecord(bd *registry.ChainRecord) error { accessNodes[k] = v.String() } - _, err := w.ChainsAPI.SetChainRecord(context.Background()).ChainRecord(apiclient.ChainRecord{ + _, err := w.ChainsAPI.SetChainRecord(context.Background(), bd.ChainID().String()).ChainRecord(apiclient.ChainRecord{ IsActive: true, AccessNodes: accessNodes, }).Execute() diff --git a/packages/chains/chains.go b/packages/chains/chains.go index 4eaff5acd2..29c09a6bed 100644 --- a/packages/chains/chains.go +++ b/packages/chains/chains.go @@ -226,7 +226,7 @@ func (c *ChainRunner) Run(ctx context.Context) error { }).Unhook c.cleanupFunc = unhook - return c.activateFromRegistry() //nolint:contextcheck + return c.activateWithoutLocking() //nolint:contextcheck } func (c *ChainRunner) Close() { @@ -260,32 +260,8 @@ func (c *ChainRunner) chainAccessUpdatedCB(accessNodes []*cryptolib.PublicKey) { c.accessMgr.ChainAccessNodes(accessNodes) } -func (c *ChainRunner) activateFromRegistry() error { - var innerErr error - var activatedChainID isc.ChainID - if err := c.chainRecordRegistryProvider.ForEachActiveChainRecord(func(chainRecord *registry.ChainRecord) bool { - if !activatedChainID.Empty() { - innerErr = fmt.Errorf("more than one active chain in the registry: %s and %s", activatedChainID.String(), chainRecord.ChainID().String()) - return false - } - - chainID := chainRecord.ChainID() - if err := c.activateWithoutLocking(chainID); err != nil { - innerErr = fmt.Errorf("cannot activate chain %s: %w", chainRecord.ChainID(), err) - return false - } - - activatedChainID = chainID - return true - }); err != nil { - return err - } - - return innerErr -} - // activateWithoutLocking activates a chain in the node. -func (c *ChainRunner) activateWithoutLocking(chainID isc.ChainID) error { //nolint:funlen +func (c *ChainRunner) activateWithoutLocking() error { //nolint:funlen if c.ctx == nil { return errors.New("run chains first") } @@ -296,27 +272,25 @@ func (c *ChainRunner) activateWithoutLocking(chainID isc.ChainID) error { //noli // // Check, maybe it is already running. if c.chain != nil { - if c.chain.ID() == chainID { - c.log.LogDebugf("Chain %v = %v is already activated", chainID.ShortString(), chainID.String()) - return nil - } - - return fmt.Errorf("cannot activate chain %v, another chain is already running: %v", chainID.ShortString(), c.chain.ID().ShortString()) + c.log.LogDebugf("Chain is already activated") + return nil } // // Activate the chain in the persistent store, if it is not activated yet. - chainRecord, err := c.chainRecordRegistryProvider.ChainRecord(chainID) + chainRecord, err := c.chainRecordRegistryProvider.ChainRecord() if err != nil { - return fmt.Errorf("cannot get chain record for %v: %w", err) + return fmt.Errorf("chain record does not exist: %w", err) } if !chainRecord.Active { - if _, err2 := c.chainRecordRegistryProvider.ActivateChainRecord(chainID); err2 != nil { + if _, err2 := c.chainRecordRegistryProvider.ActivateChainRecord(); err2 != nil { return fmt.Errorf("cannot activate chain: %w", err2) } } - chainKVStore, writeMutex, err := c.chainStateStoreProvider(c.chain.ID()) + chainID := chainRecord.ChainID() + + chainKVStore, writeMutex, err := c.chainStateStoreProvider(chainID) if err != nil { return fmt.Errorf("error when creating chain KV store: %w", err) } @@ -415,11 +389,11 @@ func (c *ChainRunner) activateWithoutLocking(chainID isc.ChainID) error { //noli } // Activate activates a chain in the node. -func (c *ChainRunner) Activate(chainID isc.ChainID) error { +func (c *ChainRunner) Activate() error { c.mutex.Lock() defer c.mutex.Unlock() - return c.activateWithoutLocking(chainID) + return c.activateWithoutLocking() } // Deactivate a chain in the node. @@ -432,7 +406,7 @@ func (c *ChainRunner) Deactivate() error { return nil } - if _, err := c.chainRecordRegistryProvider.DeactivateChainRecord(c.chain.ID()); err != nil { + if _, err := c.chainRecordRegistryProvider.DeactivateChainRecord(); err != nil { return fmt.Errorf("cannot deactivate chain %v: %w", err) } diff --git a/packages/chainutil/evmcall.go b/packages/chainutil/evmcall.go index 365e6a8e27..44548f2d69 100644 --- a/packages/chainutil/evmcall.go +++ b/packages/chainutil/evmcall.go @@ -41,7 +41,7 @@ func EVMCall( call.GasPrice = info.GasFeePolicy.DefaultGasPriceFullDecimals(parameters.BaseTokenDecimals) } - iscReq := isc.NewEVMOffLedgerCallRequest(info.ChainID, call) + iscReq := isc.NewEVMOffLedgerCallRequest(call) res, err := runISCRequest( anchor, l1Params, diff --git a/packages/chainutil/evmestimategas.go b/packages/chainutil/evmestimategas.go index 38fbefe46a..e78f3e76bd 100644 --- a/packages/chainutil/evmestimategas.go +++ b/packages/chainutil/evmestimategas.go @@ -69,7 +69,7 @@ func EVMEstimateGas( blockTime := time.Now() executable := func(gas uint64) (failed bool, result *vm.RequestResult, err error) { call.Gas = gas - iscReq := isc.NewEVMOffLedgerCallRequest(info.ChainID, call) + iscReq := isc.NewEVMOffLedgerCallRequest(call) res, err := runISCRequest( anchor, l1Params, diff --git a/packages/database/manager.go b/packages/database/manager.go index 2c51c76b64..127673fdee 100644 --- a/packages/database/manager.go +++ b/packages/database/manager.go @@ -61,7 +61,7 @@ func NewChainStateDatabaseManager(chainRecordRegistryProvider registry.ChainReco // load all active chain state databases var innerErr error - if err := chainRecordRegistryProvider.ForEachActiveChainRecord(func(cr *registry.ChainRecord) bool { + if err := chainRecordRegistryProvider.ForActiveChainRecord(func(cr *registry.ChainRecord) bool { _, err := m.createDatabase(cr.ChainID()) if err != nil { innerErr = err diff --git a/packages/database/manager_test.go b/packages/database/manager_test.go index 18e6ea3dbe..9c218602f3 100644 --- a/packages/database/manager_test.go +++ b/packages/database/manager_test.go @@ -59,7 +59,10 @@ func TestWriteAmplification(t *testing.T) { chainRecordRegistry, err := registry.NewChainRecordRegistryImpl("") require.NoError(t, err) - chainRecordRegistry.ActivateChainRecord(chainID) + rec, err := chainRecordRegistry.ActivateChainRecord() + require.NoError(t, err) + require.NotNil(t, rec) + require.Equal(t, chainID, rec.ChainID()) tempDir := fmt.Sprintf("/tmp/TestWriteAmplification-%v", time.Now().UnixMilli()) diff --git a/packages/registry/chain_registry.go b/packages/registry/chain_registry.go index 11903e9567..5fa9617510 100644 --- a/packages/registry/chain_registry.go +++ b/packages/registry/chain_registry.go @@ -144,6 +144,8 @@ type ChainRecordRegistryEvents struct { } type ChainRecordRegistryImpl struct { + chainID isc.ChainID // We only have one chain. Multi-chain code left for backwards compatibility. + onChangeMap *onchangemap.OnChangeMap[isc.ChainIDKey, isc.ChainID, *ChainRecord] events *ChainRecordRegistryEvents @@ -168,7 +170,18 @@ func NewChainRecordRegistryImpl(filePath string) (*ChainRecordRegistryImpl, erro } registry.onChangeMap = onchangemap.NewOnChangeMap( - onchangemap.WithChangedCallback[isc.ChainIDKey, isc.ChainID](registry.writeChainRecordsJSON), + onchangemap.WithChangedCallback[isc.ChainIDKey, isc.ChainID](func(chainRecords []*ChainRecord) error { + // Saving chain ID + if len(chainRecords) > 1 { + return fmt.Errorf("multiple chain records found, expected <= 1: %d", len(chainRecords)) + } else if len(chainRecords) != 0 { + registry.chainID = chainRecords[0].ID() + } else { + registry.chainID = isc.ChainID{} + } + + return registry.writeChainRecordsJSON(chainRecords) + }), ) // load chain records on startup @@ -193,7 +206,7 @@ func (p *ChainRecordRegistryImpl) loadChainRecordsJSON() error { } for i := range tmpChainRecords.ChainRecords { - if err := p.SaveChainRecord(tmpChainRecords.ChainRecords[i]); err != nil { + if err := p.SetChainRecord(tmpChainRecords.ChainRecords[i]); err != nil { return fmt.Errorf("unable to add ChainRecord to registry: %w", err) } } @@ -222,8 +235,8 @@ func (p *ChainRecordRegistryImpl) Events() *ChainRecordRegistryEvents { return p.events } -func (p *ChainRecordRegistryImpl) ChainRecord(chainID isc.ChainID) (*ChainRecord, error) { - chainRecord, err := p.onChangeMap.Get(chainID) +func (p *ChainRecordRegistryImpl) ChainRecord() (*ChainRecord, error) { + chainRecord, err := p.onChangeMap.Get(p.chainID) if err != nil { // chain record doesn't exist return nil, nil @@ -232,16 +245,20 @@ func (p *ChainRecordRegistryImpl) ChainRecord(chainID isc.ChainID) (*ChainRecord return chainRecord, nil } -func (p *ChainRecordRegistryImpl) ChainRecords() ([]*ChainRecord, error) { +func (p *ChainRecordRegistryImpl) chainRecords() ([]*ChainRecord, error) { return lo.Values(p.onChangeMap.All()), nil } -func (p *ChainRecordRegistryImpl) ForEachActiveChainRecord(consumer func(*ChainRecord) bool) error { - chainRecords, err := p.ChainRecords() +func (p *ChainRecordRegistryImpl) ForActiveChainRecord(consumer func(*ChainRecord) bool) error { + chainRecords, err := p.chainRecords() if err != nil { return err } + if len(chainRecords) > 1 { + return fmt.Errorf("multiple chain records found, expected <= 1: %d", len(chainRecords)) + } + for _, chainRecord := range chainRecords { if !chainRecord.Active { continue @@ -255,7 +272,7 @@ func (p *ChainRecordRegistryImpl) ForEachActiveChainRecord(consumer func(*ChainR return nil } -func (p *ChainRecordRegistryImpl) SaveChainRecord(chainRecord *ChainRecord) error { +func (p *ChainRecordRegistryImpl) SetChainRecord(chainRecord *ChainRecord) error { chains := len(p.onChangeMap.All()) // Only allow a single chain if chains != 0 { @@ -265,19 +282,19 @@ func (p *ChainRecordRegistryImpl) SaveChainRecord(chainRecord *ChainRecord) erro return p.onChangeMap.Add(chainRecord) } -func (p *ChainRecordRegistryImpl) DeleteChainRecord(chainID isc.ChainID) error { - return p.onChangeMap.Delete(chainID) +func (p *ChainRecordRegistryImpl) DeleteChainRecord() error { + return p.onChangeMap.Delete(p.chainID) } // UpdateChainRecord modifies a ChainRecord in the Registry. -func (p *ChainRecordRegistryImpl) UpdateChainRecord(chainID isc.ChainID, callback func(*ChainRecord) bool) (*ChainRecord, error) { +func (p *ChainRecordRegistryImpl) UpdateChainRecord(callback func(*ChainRecord) bool) (*ChainRecord, error) { var modified bool callbackHook := func(chainRecord *ChainRecord) bool { modified = callback(chainRecord) return modified } - chainRecord, err := p.onChangeMap.Modify(chainID, callbackHook) + chainRecord, err := p.onChangeMap.Modify(p.chainID, callbackHook) if err != nil { return chainRecord, err } @@ -291,8 +308,8 @@ func (p *ChainRecordRegistryImpl) UpdateChainRecord(chainID isc.ChainID, callbac return chainRecord, nil } -func (p *ChainRecordRegistryImpl) ActivateChainRecord(chainID isc.ChainID) (*ChainRecord, error) { - return p.UpdateChainRecord(chainID, func(r *ChainRecord) bool { +func (p *ChainRecordRegistryImpl) ActivateChainRecord() (*ChainRecord, error) { + return p.UpdateChainRecord(func(r *ChainRecord) bool { if r.Active { // chain was already active return false @@ -302,8 +319,8 @@ func (p *ChainRecordRegistryImpl) ActivateChainRecord(chainID isc.ChainID) (*Cha }) } -func (p *ChainRecordRegistryImpl) DeactivateChainRecord(chainID isc.ChainID) (*ChainRecord, error) { - return p.UpdateChainRecord(chainID, func(r *ChainRecord) bool { +func (p *ChainRecordRegistryImpl) DeactivateChainRecord() (*ChainRecord, error) { + return p.UpdateChainRecord(func(r *ChainRecord) bool { if !r.Active { // chain was already disabled return false diff --git a/packages/registry/chain_registry_test.go b/packages/registry/chain_registry_test.go index 9fb2e15e37..44a23e2de9 100644 --- a/packages/registry/chain_registry_test.go +++ b/packages/registry/chain_registry_test.go @@ -15,7 +15,7 @@ func TestNewChainStateDatabaseManager(t *testing.T) { chainID := isctest.RandomChainID() - err = chainRecordRegistry.SaveChainRecord(registry.NewChainRecord(chainID, false, nil)) + err = chainRecordRegistry.SetChainRecord(registry.NewChainRecord(chainID, false, nil)) require.NoError(t, err) modified := false @@ -28,8 +28,10 @@ func TestNewChainStateDatabaseManager(t *testing.T) { unhook := chainRecordRegistry.Events().ChainRecordModified.Hook(chainRecordModified).Unhook defer unhook() - _, err = chainRecordRegistry.ActivateChainRecord(chainID) + rec, err := chainRecordRegistry.ActivateChainRecord() require.NoError(t, err) + require.NotNil(t, rec) + require.Equal(t, chainID, rec.ChainID()) require.True(t, modified) require.True(t, active) diff --git a/packages/registry/providers.go b/packages/registry/providers.go index de214498cd..7f09170c1d 100644 --- a/packages/registry/providers.go +++ b/packages/registry/providers.go @@ -7,7 +7,6 @@ import ( "context" "github.com/iotaledger/wasp/v2/packages/cryptolib" - "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/peering" "github.com/iotaledger/wasp/v2/packages/tcrypto" ) @@ -24,14 +23,13 @@ type DKShareRegistryProvider interface { type ChainRecordRegistryProvider interface { Events() *ChainRecordRegistryEvents - ChainRecord(chainID isc.ChainID) (*ChainRecord, error) - ChainRecords() ([]*ChainRecord, error) - ForEachActiveChainRecord(consumer func(*ChainRecord) bool) error - SaveChainRecord(chainRecord *ChainRecord) error - DeleteChainRecord(chainID isc.ChainID) error - UpdateChainRecord(chainID isc.ChainID, f func(*ChainRecord) bool) (*ChainRecord, error) - ActivateChainRecord(chainID isc.ChainID) (*ChainRecord, error) - DeactivateChainRecord(chainID isc.ChainID) (*ChainRecord, error) + ChainRecord() (*ChainRecord, error) + ForActiveChainRecord(consumer func(*ChainRecord) bool) error + SetChainRecord(chainRecord *ChainRecord) error + DeleteChainRecord() error + UpdateChainRecord(f func(*ChainRecord) bool) (*ChainRecord, error) + ActivateChainRecord() (*ChainRecord, error) + DeactivateChainRecord() (*ChainRecord, error) } type TrustedPeersRegistryProvider interface { diff --git a/packages/testutil/chain_record_registry_provider.go b/packages/testutil/chain_record_registry_provider.go index 43a5cea2c1..6bde74f972 100644 --- a/packages/testutil/chain_record_registry_provider.go +++ b/packages/testutil/chain_record_registry_provider.go @@ -17,7 +17,7 @@ func NewChainRecordRegistryProvider() *ChainRecordRegistryProvider { return &ChainRecordRegistryProvider{} } -func (p *ChainRecordRegistryProvider) SaveChainRecord(chainRecord *registry.ChainRecord) error { +func (p *ChainRecordRegistryProvider) SetChainRecord(chainRecord *registry.ChainRecord) error { p.rec = chainRecord return nil } diff --git a/packages/webapi/controllers/chain/management.go b/packages/webapi/controllers/chain/management.go index 8fc7bc66a9..76e9e744f5 100644 --- a/packages/webapi/controllers/chain/management.go +++ b/packages/webapi/controllers/chain/management.go @@ -11,16 +11,13 @@ import ( "github.com/iotaledger/wasp/v2/packages/webapi/apierrors" "github.com/iotaledger/wasp/v2/packages/webapi/controllers/controllerutils" "github.com/iotaledger/wasp/v2/packages/webapi/models" + "github.com/iotaledger/wasp/v2/packages/webapi/params" ) func (c *Controller) activateChain(e echo.Context) error { controllerutils.SetOperation(e, "activate_chain") - chainID, err := controllerutils.ChainIDFromParams(e) - if err != nil { - return err - } - if err := c.chainService.ActivateChain(chainID); err != nil { + if err := c.chainService.ActivateChain(); err != nil { return err } @@ -61,6 +58,10 @@ func (c *Controller) rotateChain(e echo.Context) error { func (c *Controller) setChainRecord(e echo.Context) error { controllerutils.SetOperation(e, "set_chain_record") + chainID, err := params.DecodeChainID(e) + if err != nil { + return err + } // No need to validate the chain existence here (like above), as the service will create a chain record if it does not exist. @@ -69,7 +70,7 @@ func (c *Controller) setChainRecord(e echo.Context) error { return apierrors.InvalidPropertyError("body", err) } - record := registry.NewChainRecord(request.IsActive, []*cryptolib.PublicKey{}) + record := registry.NewChainRecord(chainID, request.IsActive, []*cryptolib.PublicKey{}) for _, publicKeyStr := range request.AccessNodes { publicKey, err := cryptolib.PublicKeyFromString(publicKeyStr) diff --git a/packages/webapi/controllers/corecontracts/governance.go b/packages/webapi/controllers/corecontracts/governance.go index 3eb59fcd5b..7ee2055671 100644 --- a/packages/webapi/controllers/corecontracts/governance.go +++ b/packages/webapi/controllers/corecontracts/governance.go @@ -12,9 +12,9 @@ import ( "github.com/iotaledger/wasp/v2/packages/webapi/params" ) -func MapGovChainInfoResponse(chainInfo *isc.ChainInfo) models.GovChainInfoResponse { +func MapGovChainInfoResponse(chID string, chainInfo *isc.ChainInfo) models.GovChainInfoResponse { return models.GovChainInfoResponse{ - ChainID: chainInfo.ChainID.String(), + ChainID: chID, ChainAdmin: chainInfo.ChainAdmin.String(), GasFeePolicy: chainInfo.GasFeePolicy, GasLimits: chainInfo.GasLimits, @@ -40,7 +40,7 @@ func (c *Controller) getChainInfo(e echo.Context) error { return c.handleViewCallError(err) } - chainInfoResponse := MapGovChainInfoResponse(chainInfo) + chainInfoResponse := MapGovChainInfoResponse(ch.ID().String(), chainInfo) return e.JSON(http.StatusOK, chainInfoResponse) } diff --git a/packages/webapi/controllers/requests/offledger.go b/packages/webapi/controllers/requests/offledger.go index 2a12d87658..53f7ea8bb7 100644 --- a/packages/webapi/controllers/requests/offledger.go +++ b/packages/webapi/controllers/requests/offledger.go @@ -32,7 +32,7 @@ func (c *Controller) handleOffLedgerRequest(e echo.Context) error { return apierrors.InvalidPropertyError("Request", err) } - err = c.offLedgerService.EnqueueOffLedgerRequest(ch.ID(), requestDecoded) + err = c.offLedgerService.EnqueueOffLedgerRequest(requestDecoded) if err != nil { return apierrors.InvalidOffLedgerRequestError(err) } diff --git a/packages/webapi/dto/chain.go b/packages/webapi/dto/chain.go index bff78a5584..1742722b20 100644 --- a/packages/webapi/dto/chain.go +++ b/packages/webapi/dto/chain.go @@ -32,10 +32,10 @@ type ChainInfo struct { Metadata PublicChainMetadata } -func MapChainInfo(info *isc.ChainInfo, isActive bool) *ChainInfo { +func MapChainInfo(chID isc.ChainID, info *isc.ChainInfo, isActive bool) *ChainInfo { chainInfo := &ChainInfo{ IsActive: isActive, - ChainID: info.ChainID, + ChainID: chID, ChainAdmin: info.ChainAdmin, GasFeePolicy: info.GasFeePolicy, GasLimits: info.GasLimits, diff --git a/packages/webapi/interfaces/interfaces.go b/packages/webapi/interfaces/interfaces.go index de7e90922d..46a9058797 100644 --- a/packages/webapi/interfaces/interfaces.go +++ b/packages/webapi/interfaces/interfaces.go @@ -34,10 +34,9 @@ type APIController interface { } type ChainService interface { - ActivateChain(chainID isc.ChainID) error + ActivateChain() error SetChainRecord(chainRecord *registry.ChainRecord) error DeactivateChain() error - GetAllChainIDs() ([]isc.ChainID, error) GetChain() (chain.Chain, error) GetChainInfo(blockIndexOrTrieRoot string) (*dto.ChainInfo, error) GetContracts(blockIndexOrTrieRoot string) ([]lo.Tuple2[*isc.Hname, *root.ContractRecord], error) @@ -71,7 +70,7 @@ type NodeService interface { } type RegistryService interface { - GetChainRecordByChainID() (*registry.ChainRecord, error) + GetChainRecord() (*registry.ChainRecord, error) } type CommitteeService interface { diff --git a/packages/webapi/services/chain.go b/packages/webapi/services/chain.go index af8ef7cd3b..9127b25b92 100644 --- a/packages/webapi/services/chain.go +++ b/packages/webapi/services/chain.go @@ -3,6 +3,7 @@ package services import ( "context" "errors" + "fmt" "time" "github.com/samber/lo" @@ -47,25 +48,25 @@ func NewChainService( } func (c *ChainService) ActivateChain() error { - _, err := c.chainRecordRegistryProvider.ActivateChainRecord(chainID) + _, err := c.chainRecordRegistryProvider.ActivateChainRecord() if err != nil { return err } - return c.chainsProvider().Activate(chainID) + return c.chainsProvider().Activate() } func (c *ChainService) DeactivateChain() error { - _, err := c.chainRecordRegistryProvider.DeactivateChainRecord(chainID) + _, err := c.chainRecordRegistryProvider.DeactivateChainRecord() if err != nil { return err } - return c.chainsProvider().Deactivate(chainID) + return c.chainsProvider().Deactivate() } func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { - storedChainRec, err := c.chainRecordRegistryProvider.ChainRecord(chainRecord.ChainID()) + storedChainRec, err := c.chainRecordRegistryProvider.ChainRecord() if err != nil { return err } @@ -73,8 +74,12 @@ func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { c.log.LogInfof("StoredChainRec %v %v", storedChainRec, err) if storedChainRec != nil { + if storedChainRec.ChainID() != chainRecord.ChainID() { + return fmt.Errorf("cannot update chain record with different chain ID: %v != %v", + storedChainRec.ChainID().String(), chainRecord.ChainID().String()) + } + _, err = c.chainRecordRegistryProvider.UpdateChainRecord( - chainRecord.ChainID(), func(rec *registry.ChainRecord) bool { rec.AccessNodes = chainRecord.AccessNodes rec.Active = chainRecord.Active @@ -87,7 +92,7 @@ func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { return err } } else { - if err := c.chainRecordRegistryProvider.SaveChainRecord(chainRecord); err != nil { + if err := c.chainRecordRegistryProvider.SetChainRecord(chainRecord); err != nil { c.log.LogInfof("AddChainRec %v %v", chainRecord, err) return err @@ -98,11 +103,11 @@ func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { c.log.LogInfof("Chainrecord active %v", chainRecord.Active) if chainRecord.Active { - if err := c.chainsProvider().Activate(chainRecord.ChainID()); err != nil { + if err := c.chainsProvider().Activate(); err != nil { return err } } else if storedChainRec != nil { - if err := c.chainsProvider().Deactivate(chainRecord.ChainID()); err != nil { + if err := c.chainsProvider().Deactivate(); err != nil { return err } } @@ -111,7 +116,7 @@ func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { } func (c *ChainService) GetChain() (chainpkg.Chain, error) { - return c.chainsProvider().GetFirst() + return c.chainsProvider().Get() } func (c *ChainService) GetEVMChainID(blockIndexOrTrieRoot string) (uint16, error) { @@ -126,28 +131,13 @@ func (c *ChainService) GetEVMChainID(blockIndexOrTrieRoot string) (uint16, error return evm.ViewGetChainID.DecodeOutput(ret) } -func (c *ChainService) GetAllChainIDs() ([]isc.ChainID, error) { - records, err := c.chainRecordRegistryProvider.ChainRecords() - if err != nil { - return nil, err - } - - chainIDs := make([]isc.ChainID, 0, len(records)) - - for _, chainRecord := range records { - chainIDs = append(chainIDs, chainRecord.ChainID()) - } - - return chainIDs, nil -} - func (c *ChainService) GetChainInfo(blockIndexOrTrieRoot string) (*dto.ChainInfo, error) { ch, err := c.GetChain() if err != nil { return nil, err } - chainRecord, err := c.chainRecordRegistryProvider.ChainRecord(ch.ID()) + chainRecord, err := c.chainRecordRegistryProvider.ChainRecord() if err != nil { return nil, err } @@ -161,7 +151,7 @@ func (c *ChainService) GetChainInfo(blockIndexOrTrieRoot string) (*dto.ChainInfo return nil, err } - chainInfo := dto.MapChainInfo(governanceChainInfo, chainRecord.Active) + chainInfo := dto.MapChainInfo(ch.ID(), governanceChainInfo, chainRecord.Active) return chainInfo, nil } diff --git a/packages/webapi/services/committee.go b/packages/webapi/services/committee.go index 20b367cd01..c38a7f5509 100644 --- a/packages/webapi/services/committee.go +++ b/packages/webapi/services/committee.go @@ -34,7 +34,7 @@ func (c *CommitteeService) GetPublicKey() *cryptolib.PublicKey { } func (c *CommitteeService) GetCommitteeInfo() (*dto.ChainNodeInfo, error) { - chain, err := c.chainsProvider().Get(chainID) + chain, err := c.chainsProvider().Get() if err != nil { return nil, err } diff --git a/packages/webapi/services/evm.go b/packages/webapi/services/evm.go index c0a0461158..d683623414 100644 --- a/packages/webapi/services/evm.go +++ b/packages/webapi/services/evm.go @@ -29,7 +29,7 @@ type EVMService struct { evmChainServers map[isc.ChainID]*chainServer websocketContextMutex sync.Mutex - websocketContexts map[isc.ChainID]*websocketContext + websocketContext *websocketContext chainsProvider chains.Provider chainService interfaces.ChainService @@ -56,7 +56,6 @@ func NewEVMService( chainService: chainService, evmChainServers: map[isc.ChainID]*chainServer{}, evmBackendMutex: sync.Mutex{}, - websocketContexts: map[isc.ChainID]*websocketContext{}, websocketContextMutex: sync.Mutex{}, networkProvider: networkProvider, publisher: pub, @@ -128,14 +127,14 @@ func (e *EVMService) getWebsocketContext(ctx context.Context) *websocketContext e.websocketContextMutex.Lock() defer e.websocketContextMutex.Unlock() - if e.websocketContexts[chainID] != nil { - return e.websocketContexts[chainID] + if e.websocketContext != nil { + return e.websocketContext } - e.websocketContexts[chainID] = newWebsocketContext(e.log, e.jsonrpcParams) - go e.websocketContexts[chainID].runCleanupTimer(ctx) + e.websocketContext = newWebsocketContext(e.log, e.jsonrpcParams) + go e.websocketContext.runCleanupTimer(ctx) - return e.websocketContexts[chainID] + return e.websocketContext } func (e *EVMService) HandleWebsocket(ctx context.Context, echoCtx echo.Context) error { @@ -144,12 +143,7 @@ func (e *EVMService) HandleWebsocket(ctx context.Context, echoCtx echo.Context) return err } - ch, err := e.chainService.GetChain() - if err != nil { - return err - } - - wsContext := e.getWebsocketContext(ctx, ch.ID()) + wsContext := e.getWebsocketContext(ctx) websocketHandler(evmServer, wsContext, echoCtx.RealIP()).ServeHTTP(echoCtx.Response(), echoCtx.Request()) return nil } diff --git a/packages/webapi/services/metrics.go b/packages/webapi/services/metrics.go index 09b668c074..ffe91277e0 100644 --- a/packages/webapi/services/metrics.go +++ b/packages/webapi/services/metrics.go @@ -30,7 +30,7 @@ func (c *MetricsService) GetNodeMessageMetrics() *dto.NodeMessageMetrics { } func (c *MetricsService) GetChainMessageMetrics() *dto.ChainMessageMetrics { - chain, err := c.chainProvider().Get(chainID) + chain, err := c.chainProvider().Get() if err != nil { return nil } @@ -45,7 +45,7 @@ func (c *MetricsService) GetChainMessageMetrics() *dto.ChainMessageMetrics { } func (c *MetricsService) GetChainConsensusWorkflowMetrics() *models.ConsensusWorkflowMetrics { - chain, err := c.chainProvider().Get(chainID) + chain, err := c.chainProvider().Get() if err != nil { return nil } @@ -59,7 +59,7 @@ func (c *MetricsService) GetChainConsensusWorkflowMetrics() *models.ConsensusWor } func (c *MetricsService) GetChainConsensusPipeMetrics() *models.ConsensusPipeMetrics { - chain, err := c.chainProvider().Get(chainID) + chain, err := c.chainProvider().Get() if err != nil { return nil } diff --git a/packages/webapi/services/offledger.go b/packages/webapi/services/offledger.go index e119be4d28..9d211759cb 100644 --- a/packages/webapi/services/offledger.go +++ b/packages/webapi/services/offledger.go @@ -66,12 +66,6 @@ func (c *OffLedgerService) EnqueueOffLedgerRequest(binaryRequest []byte) error { return err } - // check req is for the correct chain - if !asOffLedgerRequest.ChainID().Equals(chainID) { - // do not add to cache, it can still be sent to the correct chain - return errors.New("request is for a different chain") - } - if err := chain.ReceiveOffLedgerRequest(asOffLedgerRequest, c.networkProvider.Self().PubKey()); err != nil { return fmt.Errorf("tx not added to the mempool: %v", err.Error()) } diff --git a/packages/webapi/services/registry.go b/packages/webapi/services/registry.go index bef593a481..89e66eab57 100644 --- a/packages/webapi/services/registry.go +++ b/packages/webapi/services/registry.go @@ -18,6 +18,6 @@ func NewRegistryService(chainsProvider chains.Provider, chainRecordRegistryProvi } } -func (c *RegistryService) GetChainRecordByChainID() (*registry.ChainRecord, error) { - return c.chainRecordRegistryProvider.ChainRecord(chainID) +func (c *RegistryService) GetChainRecord() (*registry.ChainRecord, error) { + return c.chainRecordRegistryProvider.ChainRecord() } diff --git a/packages/webapi/services/waspevmbackend.go b/packages/webapi/services/waspevmbackend.go index 75573a97ac..458fd40271 100644 --- a/packages/webapi/services/waspevmbackend.go +++ b/packages/webapi/services/waspevmbackend.go @@ -65,7 +65,7 @@ func (b *WaspEVMBackend) EVMSendTransaction(tx *types.Transaction) error { return core.ErrIntrinsicGas } - req, err := isc.NewEVMOffLedgerTxRequest(b.chain.ID(), tx) + req, err := isc.NewEVMOffLedgerTxRequest(tx) if err != nil { return err } @@ -123,12 +123,7 @@ func (b *WaspEVMBackend) EVMTrace( } func (b *WaspEVMBackend) ISCCallView(chainState state.State, msg isc.Message) (isc.CallArguments, error) { - latestAnchor, err := b.chain.LatestAnchor(chain.ActiveOrCommittedState) - if err != nil { - return nil, err - } return chainutil.CallView( - latestAnchor.ChainID(), chainState, b.chain.Processors(), b.chain.Log(), diff --git a/packages/webapi/test/offledger_test.go b/packages/webapi/test/offledger_test.go index d2d3df0e3d..38afa82359 100644 --- a/packages/webapi/test/offledger_test.go +++ b/packages/webapi/test/offledger_test.go @@ -25,7 +25,7 @@ func TestOffLedger(t *testing.T) { userWallet, userAddress := env.NewKeyPairWithFunds(env.NewSeedFromIndex(0)) chain.DepositBaseTokensToL2(env.L1BaseTokens(userAddress)/10, userWallet) - req := isc.NewOffLedgerRequest(chain.ID(), accounts.FuncDeposit.Message(), 0, math.MaxUint64) + req := isc.NewOffLedgerRequest(accounts.FuncDeposit.Message(), 0, math.MaxUint64) altReq := isc.NewImpersonatedOffLedgerRequest(req.(*isc.OffLedgerRequestDataEssence)). WithSenderAddress(userWallet.Address()) diff --git a/packages/webapi/websocket/eventhandler.go b/packages/webapi/websocket/eventhandler.go index 38574bd4d4..30a3c2115e 100644 --- a/packages/webapi/websocket/eventhandler.go +++ b/packages/webapi/websocket/eventhandler.go @@ -13,7 +13,6 @@ type ISCEvent struct { Kind publisher.ISCEventType `json:"kind"` Issuer string `json:"issuer"` // (isc.AgentID) nil means issued by the VM RequestID string `json:"requestID"` // (isc.RequestID) - ChainID string `json:"chainID"` // (isc.ChainID) Payload any `json:"payload"` } @@ -27,7 +26,6 @@ func MapISCEvent[T any](iscEvent *publisher.ISCEvent[T], mappedPayload any) *ISC return &ISCEvent{ Kind: iscEvent.Kind, - ChainID: iscEvent.ChainID.String(), RequestID: iscEvent.RequestID.String(), Issuer: issuer, Payload: mappedPayload, @@ -61,7 +59,7 @@ func batch(callbacks ...func()) func() { func (p *EventHandler) AttachToEvents() context.CancelFunc { return batch( p.publisher.Events.NewBlock.Hook(func(block *publisher.ISCEvent[*publisher.BlockWithTrieRoot]) { - if !p.subscriptionValidator.shouldProcessEvent(block.ChainID.String(), block.Kind) { + if !p.subscriptionValidator.shouldProcessEvent(block.Kind) { return } @@ -71,7 +69,7 @@ func (p *EventHandler) AttachToEvents() context.CancelFunc { }).Unhook, p.publisher.Events.RequestReceipt.Hook(func(block *publisher.ISCEvent[*publisher.ReceiptWithError]) { - if !p.subscriptionValidator.shouldProcessEvent(block.ChainID.String(), block.Kind) { + if !p.subscriptionValidator.shouldProcessEvent(block.Kind) { return } @@ -81,7 +79,7 @@ func (p *EventHandler) AttachToEvents() context.CancelFunc { }).Unhook, p.publisher.Events.BlockEvents.Hook(func(block *publisher.ISCEvent[[]*isc.Event]) { - if !p.subscriptionValidator.shouldProcessEvent(block.ChainID.String(), block.Kind) { + if !p.subscriptionValidator.shouldProcessEvent(block.Kind) { return } diff --git a/packages/webapi/websocket/eventhandler_test.go b/packages/webapi/websocket/eventhandler_test.go index 74c6e988d4..f5e1b68e82 100644 --- a/packages/webapi/websocket/eventhandler_test.go +++ b/packages/webapi/websocket/eventhandler_test.go @@ -51,17 +51,13 @@ func TestSuccessfulEventHandling(t *testing.T) { subscriptionManager.Subscribe(1, string(publisher.ISCEventKindNewBlock)) - chainID := isctest.RandomChainID() - publisherEvent.Hook(func(iscEvent *ISCEvent) { - require.Exactly(t, iscEvent.ChainID, chainID.String()) cancel() }) pub.Events.NewBlock.Trigger(&publisher.ISCEvent[*publisher.BlockWithTrieRoot]{ - Kind: publisher.ISCEventKindNewBlock, - ChainID: chainID, - Issuer: isctest.NewRandomAgentID(), + Kind: publisher.ISCEventKindNewBlock, + Issuer: isctest.NewRandomAgentID(), Payload: &publisher.BlockWithTrieRoot{ BlockInfo: &blocklog.BlockInfo{}, TrieRoot: trie.Hash{}, diff --git a/packages/webapi/websocket/service.go b/packages/webapi/websocket/service.go index cca00b6d09..460cb73055 100644 --- a/packages/webapi/websocket/service.go +++ b/packages/webapi/websocket/service.go @@ -72,7 +72,7 @@ func (p *Service) onClientCreated(client *websockethub.Client) { go func() { unhook := p.publisherEvent.Hook(func(iscEvent *ISCEvent) { - if !p.subscriptionValidator.isClientAllowed(client, iscEvent.ChainID, iscEvent.Kind) { + if !p.subscriptionValidator.isClientAllowed(client, iscEvent.Kind) { return } diff --git a/packages/webapi/websocket/subscriptionvalidator.go b/packages/webapi/websocket/subscriptionvalidator.go index 7441b5c9aa..879ed04077 100644 --- a/packages/webapi/websocket/subscriptionvalidator.go +++ b/packages/webapi/websocket/subscriptionvalidator.go @@ -2,8 +2,6 @@ package websocket import ( - "fmt" - "github.com/iotaledger/hive.go/web/subscriptionmanager" "github.com/iotaledger/hive.go/web/websockethub" "github.com/iotaledger/wasp/v2/packages/publisher" @@ -21,22 +19,6 @@ func NewSubscriptionValidator(messageTypes map[publisher.ISCEventType]bool, subs } } -func (p *SubscriptionValidator) hasClientSubscribedToAllChains(client *websockethub.Client) bool { - return p.subscriptionManager.ClientSubscribedToTopic(client.ID(), "chains") -} - -func (p *SubscriptionValidator) hasAnyoneSubscribedToAllChains() bool { - return p.subscriptionManager.TopicHasSubscribers("chains") -} - -func (p *SubscriptionValidator) hasClientSubscribedToSingleChain(client *websockethub.Client) bool { - return p.subscriptionManager.ClientSubscribedToTopic(client.ID(), fmt.Sprintf("chains/%s")) -} - -func (p *SubscriptionValidator) hasAnyoneSubscribedToSingleChain(chainID string) bool { - return p.subscriptionManager.TopicHasSubscribers(fmt.Sprintf("chains/%s")) -} - // shouldProcessEvent validates if any subscriber has subscribed to a certain chainID and messageType. // it returns false if no one has subscribed to those parameters // this usually means, that there is no need to process a certain incoming event. @@ -45,11 +27,6 @@ func (p *SubscriptionValidator) shouldProcessEvent(messageType publisher.ISCEven return false } - // Check if any client has either subscribed to all chains [chains], or the supplied single chain id [chains/] - if !p.hasAnyoneSubscribedToAllChains() && !p.hasAnyoneSubscribedToSingleChain(chainID) { - return false - } - if !p.subscriptionManager.TopicHasSubscribers(string(messageType)) { return false } @@ -65,11 +42,6 @@ func (p *SubscriptionValidator) isClientAllowed(client *websockethub.Client, mes return false } - // Check a client has either subscribed to all chains [chains], or the supplied single chain id [chains/] - if !p.hasClientSubscribedToAllChains(client) && !p.hasClientSubscribedToSingleChain(client) { - return false - } - if !p.subscriptionManager.ClientSubscribedToTopic(client.ID(), string(messageType)) { return false } diff --git a/packages/webapi/websocket/websocket_test.go b/packages/webapi/websocket/websocket_test.go index b276f292a6..e57705fa38 100644 --- a/packages/webapi/websocket/websocket_test.go +++ b/packages/webapi/websocket/websocket_test.go @@ -66,8 +66,6 @@ func TestWebsocketEvents(t *testing.T) { // It's the last step before the events get send via the websocket to the client. // It's also the last step to validate the events without actually connecting with a websocket client. ws.publisherEvent.Hook(func(iscEvent *ISCEvent) { - require.Exactly(t, iscEvent.ChainID, chain.ChainID.String()) - if iscEvent.Kind == publisher.ISCEventKindNewBlock { cancel() } else { diff --git a/tools/cluster/cluster.go b/tools/cluster/cluster.go index b9b04b08ee..e571d5ac0f 100644 --- a/tools/cluster/cluster.go +++ b/tools/cluster/cluster.go @@ -360,7 +360,7 @@ func (clu *Cluster) DeployChain(allPeers, committeeNodes []int, quorum uint16, s } // activate chain on nodes - err = apilib.ActivateChainOnNodes(clu.WaspClientFromHostName, chain.CommitteeAPIHosts()) + err = apilib.ActivateChainOnNodes(clu.WaspClientFromHostName, chain.CommitteeAPIHosts(), chainID) if err != nil { clu.t.Fatalf("activating chain %s.. FAILED: %v\n", chainID.String(), err) } @@ -417,7 +417,7 @@ func (clu *Cluster) addAllAccessNodes(chain *Chain, accessNodes []int) error { for _, tx := range addAccessNodesTxs { // ---------- wait until the requests are processed in all committee nodes - if _, err := peers.WaitUntilAllRequestsProcessedSuccessfully(context.Background(), chain.ChainID, tx, true, 30*time.Second); err != nil { + if _, err := peers.WaitUntilAllRequestsProcessedSuccessfully(context.Background(), tx, true, 30*time.Second); err != nil { return fmt.Errorf("WaitAddAccessNode: %w", err) } } @@ -450,7 +450,7 @@ func (clu *Cluster) addAllAccessNodes(chain *Chain, accessNodes []int) error { if err != nil { return err } - _, err = peers.WaitUntilAllRequestsProcessedSuccessfully(context.Background(), chain.ChainID, tx, true, 30*time.Second) + _, err = peers.WaitUntilAllRequestsProcessedSuccessfully(context.Background(), tx, true, 30*time.Second) if err != nil { return err } diff --git a/tools/cluster/tests/access_nodes_test.go b/tools/cluster/tests/access_nodes_test.go index b036769e3a..cbd2ad15a6 100644 --- a/tools/cluster/tests/access_nodes_test.go +++ b/tools/cluster/tests/access_nodes_test.go @@ -98,7 +98,7 @@ func (e *ChainEnv) testPermissionlessAccessNode(t *testing.T) { require.NoError(t, err) // request has been processed - _, err = e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), e.Chain.ChainID, req.ID(), false, 1*time.Minute) + _, err = e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), req.ID(), false, 1*time.Minute) require.NoError(t, err) // remove the access node from cluster1 node 0 diff --git a/tools/cluster/tests/account_test.go b/tools/cluster/tests/account_test.go index 88cc138d96..39489244a3 100644 --- a/tools/cluster/tests/account_test.go +++ b/tools/cluster/tests/account_test.go @@ -111,7 +111,7 @@ func (e *ChainEnv) testBasic2Accounts(t *testing.T) { require.NoError(t, err) time.Sleep(3 * time.Second) - reqceipt, err := e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), e.Chain.ChainID, req.ID(), false, 30*time.Second) + reqceipt, err := e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), req.ID(), false, 30*time.Second) require.NoError(t, err) user1L2Bal2 := e.GetL2Balance(isc.NewAddressAgentID(addressUser1), coin.BaseTokenType) diff --git a/tools/cluster/tests/advanced_account_test.go b/tools/cluster/tests/advanced_account_test.go index 162b5bd424..769f79134b 100644 --- a/tools/cluster/tests/advanced_account_test.go +++ b/tools/cluster/tests/advanced_account_test.go @@ -125,7 +125,7 @@ func testAccessNodesOffLedger(t *testing.T, numRequests, numValidatorNodes, clus }) require.NoError(t, err) - _, err = e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, tx, true, 30*time.Second) + _, err = e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), tx, true, 30*time.Second) require.NoError(t, err) someRandomsAddress := isc.NewEthereumAddressAgentID(common.MaxAddress) diff --git a/tools/cluster/tests/deploy_test.go b/tools/cluster/tests/deploy_test.go index fe0e833bfe..2978e28c5e 100644 --- a/tools/cluster/tests/deploy_test.go +++ b/tools/cluster/tests/deploy_test.go @@ -12,7 +12,7 @@ import ( // executed in cluster_test.go func (e *ChainEnv) testDeployChain(t *testing.T) { chainID, chainAdmin := e.getChainInfo() - require.EqualValues(t, e.Chain.ChainID) + require.EqualValues(t, chainID, e.Chain.ChainID) require.EqualValues(t, chainAdmin, isc.NewAddressAgentID(e.Chain.OriginatorAddress())) t.Logf("--- chainID: %s", chainID.String()) t.Logf("--- chainAdmin: %s", chainAdmin.String()) diff --git a/tools/cluster/tests/env.go b/tools/cluster/tests/env.go index 8242a63a62..144dd095d4 100644 --- a/tools/cluster/tests/env.go +++ b/tools/cluster/tests/env.go @@ -83,7 +83,7 @@ func (e *ChainEnv) DepositFunds(amount coin.Value, keyPair *cryptolib.KeyPair) { } tx, err := client.PostRequest(context.Background(), accounts.FuncDeposit.Message(), params) require.NoError(e.t, err) - _, err = e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, tx, true, 30*time.Second) + _, err = e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), tx, true, 30*time.Second) require.NoError(e.t, err, "Error while WaitUntilAllRequestsProcessedSuccessfully for tx.ID=%v", tx.Digest) } @@ -98,7 +98,7 @@ func (e *ChainEnv) TransferFundsTo(assets *isc.Assets, keyPair *cryptolib.KeyPai L2GasBudget: uint64(l2GasFee), }) require.NoError(e.t, err) - _, err = e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, tx, false, 30*time.Second) + _, err = e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), tx, false, 30*time.Second) require.NoError(e.t, err, "Error while WaitUntilAllRequestsProcessedSuccessfully for tx.ID=%v", tx.Digest) } @@ -140,7 +140,7 @@ func (e *ChainEnv) DeploySolidityContract(creator *ecdsa.PrivateKey, abiJSON str require.NoError(e.t, err) // await tx confirmed - _, err = e.Chain.CommitteeMultiClient().WaitUntilEVMRequestProcessedSuccessfully(context.Background(), e.Chain.ChainID, tx.Hash(), false, 30*time.Second) + _, err = e.Chain.CommitteeMultiClient().WaitUntilEVMRequestProcessedSuccessfully(context.Background(), tx.Hash(), false, 30*time.Second) require.NoError(e.t, err) return crypto.CreateAddress(creatorAddress, nonce), contractABI @@ -229,7 +229,7 @@ func (e *ChainEnv) CallStore(archiveClient, lightClient *ethclient.Client, input require.NoError(e.t, err) // await tx confirmed for i := 0; i < 3; i++ { - _, err = e.Clu.MultiClient().WaitUntilEVMRequestProcessedSuccessfully(context.Background(), e.Chain.ChainID, tx.Hash(), false, 30*time.Second) + _, err = e.Clu.MultiClient().WaitUntilEVMRequestProcessedSuccessfully(context.Background(), tx.Hash(), false, 30*time.Second) if err == nil { break } diff --git a/tools/cluster/tests/estimategas_test.go b/tools/cluster/tests/estimategas_test.go index aae9a6b484..67ac7e4cc4 100644 --- a/tools/cluster/tests/estimategas_test.go +++ b/tools/cluster/tests/estimategas_test.go @@ -66,7 +66,6 @@ func (e *ChainEnv) testEstimateGasOffLedger(t *testing.T) { e.DepositFunds(10*isc.Million, keyPair) estimationReq := isc.NewOffLedgerRequest( - e.Chain.ChainID, accounts.FuncTransferAllowanceTo.Message(isc.NewAddressAgentID(cryptolib.NewEmptyAddress())), 0, 1*isc.Million, @@ -102,7 +101,7 @@ func (e *ChainEnv) testEstimateGasOffLedger(t *testing.T) { par, ) require.NoError(t, err) - rec, err := e.Clu.MultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), e.Chain.ChainID, req.ID(), false, 30*time.Second) + rec, err := e.Clu.MultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), req.ID(), false, 30*time.Second) require.NoError(t, err) require.Equal(t, rec.GasBurned, estimatedReceipt.GasBurned) require.Equal(t, rec.GasFeeCharged, estimatedReceipt.GasFeeCharged) diff --git a/tools/cluster/tests/evm_jsonrpc_test.go b/tools/cluster/tests/evm_jsonrpc_test.go index d343a0d127..8f1ebb646d 100644 --- a/tools/cluster/tests/evm_jsonrpc_test.go +++ b/tools/cluster/tests/evm_jsonrpc_test.go @@ -97,7 +97,7 @@ func (e *clusterTestEnv) newEthereumAccountWithL2Funds(baseTokens ...coin.Value) require.NoError(e.T, err) // We have to wait not only for the committee to process the request, but also for access nodes to get that info. - _, err = e.Chain.AllNodesMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, tx, false, 30*time.Second) + _, err = e.Chain.AllNodesMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), tx, false, 30*time.Second) require.NoError(e.T, err) return ethKey, ethAddr @@ -140,7 +140,7 @@ func TestEVMJsonRPCZeroGasFee(t *testing.T) { GasBudget: iotaclient.DefaultGasBudget, }) require.NoError(t, err) - _, err = e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, reqTx, false, 30*time.Second) + _, err = e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), reqTx, false, 30*time.Second) require.NoError(t, err) d, err := govClient.CallView(context.Background(), governance.ViewGetFeePolicy.Message()) diff --git a/tools/cluster/tests/missing_requests_test.go b/tools/cluster/tests/missing_requests_test.go index 5917ed6bb4..7a89aa0bc3 100644 --- a/tools/cluster/tests/missing_requests_test.go +++ b/tools/cluster/tests/missing_requests_test.go @@ -26,7 +26,6 @@ func TestMissingRequests(t *testing.T) { chain, err := clu.DeployChain(clu.Config.AllNodes(), cmt, threshold, addr) require.NoError(t, err) - chainID := chain.ChainID chEnv := newChainEnv(t, clu, chain) diff --git a/tools/cluster/tests/offledger_requests_test.go b/tools/cluster/tests/offledger_requests_test.go index 8cf991ad65..ac87362d20 100644 --- a/tools/cluster/tests/offledger_requests_test.go +++ b/tools/cluster/tests/offledger_requests_test.go @@ -80,7 +80,7 @@ func (e *ChainEnv) testOffledgerNonce(t *testing.T) { }, ) require.NoError(t, err) - _, err = e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), e.Chain.ChainID, offledgerReq.ID(), false, 30*time.Second) + _, err = e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), offledgerReq.ID(), false, 30*time.Second) require.Error(t, err) // wont' be processed // send off-ledger requests with the correct nonce @@ -93,7 +93,7 @@ func (e *ChainEnv) testOffledgerNonce(t *testing.T) { }, ) require.NoError(t, err2) - _, err2 = e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), e.Chain.ChainID, req.ID(), false, 10*time.Second) + _, err2 = e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), req.ID(), false, 10*time.Second) require.NoError(t, err2) } @@ -124,7 +124,7 @@ func (e *ChainEnv) newWalletWithL2Funds(waspnode int, waitOnNodes ...int) *chain }) require.NoError(e.t, err) - receipts, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, reqTx, false, 30*time.Second) + receipts, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), reqTx, false, 30*time.Second) require.NoError(e.t, err) gasFeeCharged, err := util.DecodeUint64(receipts[0].GasFeeCharged) diff --git a/tools/cluster/tests/post_test.go b/tools/cluster/tests/post_test.go index 45f7657adc..502f1a582f 100644 --- a/tools/cluster/tests/post_test.go +++ b/tools/cluster/tests/post_test.go @@ -30,7 +30,7 @@ func (e *ChainEnv) testPost1Request(t *testing.T) { }) require.NoError(t, err) - receipts, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, reqTx, true, 30*time.Second) + receipts, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), reqTx, true, 30*time.Second) require.NoError(t, err) balance2 := e.GetL2Balance(isc.NewAddressAgentID(userAddr), coin.BaseTokenType) @@ -55,7 +55,7 @@ func (e *ChainEnv) testPost3Requests(t *testing.T) { }) require.NoError(t, err) - recs, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, tx, true, 30*time.Second) + recs, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), tx, true, 30*time.Second) require.NoError(t, err) receipts[i] = recs[0] } @@ -90,7 +90,7 @@ func (e *ChainEnv) testPost5AsyncRequests(t *testing.T) { } for i := 0; i < 5; i++ { - receipts, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, tx[i], false, 30*time.Second) + receipts, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), tx[i], false, 30*time.Second) require.NoError(t, err) gasFeeCharged, err := util.DecodeUint64(receipts[0].GasFeeCharged) diff --git a/tools/cluster/tests/pruning_test.go b/tools/cluster/tests/pruning_test.go index 5d5ca38ed9..abae289cd2 100644 --- a/tools/cluster/tests/pruning_test.go +++ b/tools/cluster/tests/pruning_test.go @@ -52,7 +52,7 @@ func TestPruning(t *testing.T) { }, ) require.NoError(t, err) - _, err = chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), chain.ChainID, req.ID(), true, 30*time.Second) + _, err = chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), req.ID(), true, 30*time.Second) require.NoError(t, err) // let's send 100 EVM requests (wait for each request individually, so that the chain height increases as much as possible) diff --git a/tools/cluster/tests/reboot_test.go b/tools/cluster/tests/reboot_test.go index 12068c533e..aba094cd15 100644 --- a/tools/cluster/tests/reboot_test.go +++ b/tools/cluster/tests/reboot_test.go @@ -292,7 +292,7 @@ func TestRebootDuringTasks(t *testing.T) { chainclient.PostRequestParams{Allowance: isc.NewAssets(5000)}, ) require.NoError(t, err) - _, err = env.Clu.MultiClient().WaitUntilRequestProcessed(context.Background(), env.Chain.ChainID, req.ID(), true, 10*time.Second) + _, err = env.Clu.MultiClient().WaitUntilRequestProcessed(context.Background(), req.ID(), true, 10*time.Second) require.NoError(t, err) env.checkBalanceOnChain(targetAgentID, coin.BaseTokenType, 5000) } diff --git a/tools/cluster/tests/spam_test.go b/tools/cluster/tests/spam_test.go index e90cedea8a..ccf3f215d9 100644 --- a/tools/cluster/tests/spam_test.go +++ b/tools/cluster/tests/spam_test.go @@ -98,7 +98,7 @@ func (e *ChainEnv) testSpamOnledger(t *testing.T) { for range numRequests { tx := <-txCh - _, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, &tx, false, 30*time.Second) + _, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), &tx, false, 30*time.Second) require.NoError(t, err) } @@ -154,7 +154,7 @@ func (e *ChainEnv) testSpamOffLedger(t *testing.T) { } reqSentTime := time.Now() // wait for the request to be processed - _, err = e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), e.Chain.ChainID, req.ID(), false, 1*time.Minute) + _, err = e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), req.ID(), false, 1*time.Minute) if err != nil { reqErrorChan <- err return @@ -241,7 +241,7 @@ func (e *ChainEnv) testSpamEVM(t *testing.T) { // await txs confirmed for _, tx := range transactions { - _, err2 := e.Clu.MultiClient().WaitUntilEVMRequestProcessedSuccessfully(context.Background(), e.Chain.ChainID, tx.Hash(), false, 30*time.Second) + _, err2 := e.Clu.MultiClient().WaitUntilEVMRequestProcessedSuccessfully(context.Background(), tx.Hash(), false, 30*time.Second) require.NoError(t, err2) } diff --git a/tools/cluster/tests/transfer_test.go b/tools/cluster/tests/transfer_test.go index 7fafd20197..4bba182e86 100644 --- a/tools/cluster/tests/transfer_test.go +++ b/tools/cluster/tests/transfer_test.go @@ -37,7 +37,7 @@ func TestDepositWithdraw(t *testing.T) { reqTx, err := chClient.PostRequest(context.Background(), accounts.FuncDeposit.Message(), params) require.NoError(t, err) - receipts, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, reqTx, true, 30*time.Second) + receipts, err := e.Chain.CommitteeMultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), reqTx, true, 30*time.Second) require.NoError(t, err) gasFees1, err := util.DecodeUint64(receipts[0].GasFeeCharged) @@ -57,7 +57,7 @@ func TestDepositWithdraw(t *testing.T) { }, ) require.NoError(t, err) - receipt, err := e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), e.Chain.ChainID, req.ID(), true, 30*time.Second) + receipt, err := e.Chain.CommitteeMultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), req.ID(), true, 30*time.Second) require.NoError(t, err) gasFees2, err := util.DecodeUint64(receipt.GasFeeCharged) diff --git a/tools/cluster/tests/util.go b/tools/cluster/tests/util.go index ed4d8d5a38..6a6b93ea49 100644 --- a/tools/cluster/tests/util.go +++ b/tools/cluster/tests/util.go @@ -104,7 +104,7 @@ func (e *ChainEnv) checkBalanceOnChain(agentID isc.AgentID, coinType coin.Type, require.EqualValues(e.t, expected, actual) } -func (e *ChainEnv) getChainInfo() isc.AgentID { +func (e *ChainEnv) getChainInfo() (isc.ChainID, isc.AgentID) { chainInfo, _, err := e.Chain.Cluster.WaspClient(0).ChainsAPI. GetChainInfo(context.Background()). Execute() diff --git a/tools/cluster/tests/validator_fees_test.go b/tools/cluster/tests/validator_fees_test.go index 7f3316d3f4..45f649aaa0 100644 --- a/tools/cluster/tests/validator_fees_test.go +++ b/tools/cluster/tests/validator_fees_test.go @@ -55,7 +55,7 @@ func TestValidatorFees(t *testing.T) { chainclient.PostRequestParams{Nonce: 0}, ) require.NoError(t, err2) - _, err2 = clu.MultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), chain.ChainID, req.ID(), false, 30*time.Second) + _, err2 = clu.MultiClient().WaitUntilRequestProcessedSuccessfully(context.Background(), req.ID(), false, 30*time.Second) require.NoError(t, err2) } // send a bunch of requests @@ -63,7 +63,7 @@ func TestValidatorFees(t *testing.T) { // assert each validator has received fees userWallet, _, err := chEnv.Clu.NewKeyPairWithFunds() require.NoError(t, err) - scClient := chainclient.New(clu.L1Client(), clu.WaspClient(0), clu.Config.ISCPackageID(), userWallet) + scClient := chainclient.New(clu.L1Client(), clu.WaspClient(0), chainID, clu.Config.ISCPackageID(), userWallet) for i := 0; i < 20; i++ { reqTx, err := scClient.PostRequest(context.Background(), accounts.FuncDeposit.Message(), chainclient.PostRequestParams{ Transfer: isc.NewAssets(iotaclient.DefaultGasBudget + 100), diff --git a/tools/cluster/tests/wasp-cli_rotation_test.go b/tools/cluster/tests/wasp-cli_rotation_test.go index 8e26cfa914..0e9360600b 100644 --- a/tools/cluster/tests/wasp-cli_rotation_test.go +++ b/tools/cluster/tests/wasp-cli_rotation_test.go @@ -68,8 +68,9 @@ func testWaspCLIExternalRotation(t *testing.T, addAccessNode func(*WaspCLITest, fmt.Sprintf("--gov-controller=%s", w.WaspCliAddress.String()), "--node=0", ) - matches := regexp.MustCompile(`.*ChainID:\s*([a-zA-Z0-9_]*)\s+.*`).FindStringSubmatch(strings.Join(out, " ")) - chainID := matches[1] + // TODO: FIX this test + //matches := regexp.MustCompile(`.*ChainID:\s*([a-zA-Z0-9_]*)\s+.*`).FindStringSubmatch(strings.Join(out, " ")) + //chainID := matches[1] w.ActivateChainOnAllNodes("chain1", 0) // start a new wasp cluster diff --git a/tools/wasp-cli/chain/accounts.go b/tools/wasp-cli/chain/accounts.go index 8ae5db001b..f2c1decfc0 100644 --- a/tools/wasp-cli/chain/accounts.go +++ b/tools/wasp-cli/chain/accounts.go @@ -154,7 +154,7 @@ func initDepositCmd() *cobra.Command { allowance.SetBaseTokens(allowance.BaseTokens()) res = util.WithSCTransaction(ctx, client, func() (*iotajsonrpc.IotaTransactionBlockResponse, error) { - return cliclients.ChainClient(client).PostRequest(ctx, + return cliclients.ChainClient(client, chainID).PostRequest(ctx, accounts.FuncDeposit.Message(), chainclient.PostRequestParams{ Transfer: tokens, @@ -172,7 +172,7 @@ func initDepositCmd() *cobra.Command { allowance.SetBaseTokens(allowance.BaseTokens()) res = util.WithSCTransaction(ctx, client, func() (*iotajsonrpc.IotaTransactionBlockResponse, error) { - return cliclients.ChainClient(client).PostRequest( + return cliclients.ChainClient(client, chainID).PostRequest( ctx, accounts.FuncTransferAllowanceTo.Message(agentID), chainclient.PostRequestParams{ diff --git a/tools/wasp-cli/chain/activate.go b/tools/wasp-cli/chain/activate.go index 86fbca0f3c..7ef4e08097 100644 --- a/tools/wasp-cli/chain/activate.go +++ b/tools/wasp-cli/chain/activate.go @@ -7,6 +7,7 @@ import ( "github.com/spf13/cobra" "github.com/iotaledger/wasp/v2/clients/apiclient" + "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/tools/wasp-cli/cli/cliclients" "github.com/iotaledger/wasp/v2/tools/wasp-cli/cli/config" "github.com/iotaledger/wasp/v2/tools/wasp-cli/log" @@ -25,7 +26,7 @@ func initActivateCmd() *cobra.Command { chainName = defaultChainFallback(chainName) chainID := config.GetChain(chainName) ctx := context.Background() - activateChain(ctx, node, chainName) + activateChain(ctx, node, chainName, chainID) }, } @@ -35,7 +36,7 @@ func initActivateCmd() *cobra.Command { return cmd } -func activateChain(ctx context.Context, node string, chainName string) { +func activateChain(ctx context.Context, node string, chainName string, chainID isc.ChainID) { client := cliclients.WaspClientWithVersionCheck(ctx, node) r, httpStatus, err := client.ChainsAPI.GetChainInfo(ctx).Execute() //nolint:bodyclose // false positive diff --git a/tools/wasp-cli/chain/deploy.go b/tools/wasp-cli/chain/deploy.go index 580dbd1711..f8bece8295 100644 --- a/tools/wasp-cli/chain/deploy.go +++ b/tools/wasp-cli/chain/deploy.go @@ -215,7 +215,7 @@ func initDeployCmd() *cobra.Command { chainID := finalizeChainDeployment(ctx, node, *result, stateMetadata) config.AddChain(chainName, chainID.String()) - activateChain(ctx, node, chainName) + activateChain(ctx, node, chainName, chainID) }, } diff --git a/tools/wasp-cli/chain/postrequest.go b/tools/wasp-cli/chain/postrequest.go index 38a5aafc14..408d162a48 100644 --- a/tools/wasp-cli/chain/postrequest.go +++ b/tools/wasp-cli/chain/postrequest.go @@ -19,7 +19,7 @@ import ( func postRequest(ctx context.Context, client *apiclient.APIClient, chain string, msg isc.Message, params chainclient.PostRequestParams, offLedger bool) { chainID := config.GetChain(chain) - chainClient := cliclients.ChainClient(client) + chainClient := cliclients.ChainClient(client, chainID) if offLedger { util.WithOffLedgerRequest(ctx, client, func() (isc.OffLedgerRequest, error) { diff --git a/tools/wasp-cli/cli/cliclients/clients.go b/tools/wasp-cli/cli/cliclients/clients.go index ba785ed428..9a1639e905 100644 --- a/tools/wasp-cli/cli/cliclients/clients.go +++ b/tools/wasp-cli/cli/cliclients/clients.go @@ -11,6 +11,7 @@ import ( "github.com/iotaledger/wasp/v2/clients/chainclient" "github.com/iotaledger/wasp/v2/clients/iota-go/iotaclient" "github.com/iotaledger/wasp/v2/components/app" + "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/tools/wasp-cli/cli/config" "github.com/iotaledger/wasp/v2/tools/wasp-cli/cli/wallet" "github.com/iotaledger/wasp/v2/tools/wasp-cli/log" @@ -64,7 +65,7 @@ func L1Client() clients.L1Client { }, iotaclient.WaitForEffectsEnabled) } -func ChainClient(waspClient *apiclient.APIClient) *chainclient.Client { +func ChainClient(waspClient *apiclient.APIClient, chainID isc.ChainID) *chainclient.Client { iscPackageID := config.GetPackageID() return chainclient.New( diff --git a/tools/wasp-cli/cli/config/config.go b/tools/wasp-cli/cli/config/config.go index 45a372035d..9597998c1f 100644 --- a/tools/wasp-cli/cli/config/config.go +++ b/tools/wasp-cli/cli/config/config.go @@ -156,8 +156,8 @@ func AddWaspNode(name, apiURL string) { Set("wasp."+name, apiURL) } -func AddChain(name) { - Set("chains." + name) +func AddChain(name, chainID string) { + Set("chains."+name, chainID) } func WriteConfig() error { From 660ca799d1cfe599836b89f98f38fa3a053a9c21 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Tue, 12 Aug 2025 08:01:27 -0700 Subject: [PATCH 07/27] Fixed build & lint --- .../chains/accessmanager/access_manager_test.go | 2 +- .../dist/access_manager_rapid_test.go | 17 ++++++++--------- packages/chains/chains.go | 2 +- packages/nodeconn/nodeconn.go | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/packages/chains/accessmanager/access_manager_test.go b/packages/chains/accessmanager/access_manager_test.go index eab2a6e496..f26a814976 100644 --- a/packages/chains/accessmanager/access_manager_test.go +++ b/packages/chains/accessmanager/access_manager_test.go @@ -80,7 +80,7 @@ func testBasic(t *testing.T, n int, reliable bool) { for i := range accessMgrs { ii := i serversUpdatedCB := func(servers []*cryptolib.PublicKey) { - t.Logf("servers updated, ChainID=%v, servers=%+v", servers) + t.Logf("servers updated, servers=%+v", servers) nodeServers[ii] = servers } accessMgrs[i] = accessmanager.New(ctx, serversUpdatedCB, peerIdentities[i], networkProviders[i], log.NewChildLogger(fmt.Sprintf("N#%v", i))) diff --git a/packages/chains/accessmanager/dist/access_manager_rapid_test.go b/packages/chains/accessmanager/dist/access_manager_rapid_test.go index 6b4eae742c..283ec422f2 100644 --- a/packages/chains/accessmanager/dist/access_manager_rapid_test.go +++ b/packages/chains/accessmanager/dist/access_manager_rapid_test.go @@ -45,7 +45,7 @@ type accessMgrSM struct { var _ rapid.StateMachine = &accessMgrSM{} -func newAccessMgrSM(t *rapid.T, nodeCount, chainCount int) *accessMgrSM { +func newAccessMgrSM(t *rapid.T, nodeCount int) *accessMgrSM { sm := new(accessMgrSM) if !sm.initialized { sm.log = testlogger.NewLogger(t) @@ -69,7 +69,7 @@ func newAccessMgrSM(t *rapid.T, nodeCount, chainCount int) *accessMgrSM { sm.nodes[nid] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, func(servers []*cryptolib.PublicKey) { - t.Logf("serversUpdatedCB: nodeID=%v, chainID=%v, servers=%v", nidCopy, servers) + t.Logf("serversUpdatedCB: nodeID=%v, servers=%v", nidCopy, servers) sm.servers[nidCopy] = servers }, func(pk *cryptolib.PublicKey) {}, @@ -118,7 +118,7 @@ func (sm *accessMgrSM) Reboot(t *rapid.T) { sm.nodes[nodeID] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, func(servers []*cryptolib.PublicKey) { - t.Logf("serversUpdatedCB: nodeID=%v, chainID=%v, servers=%v", nodeID, servers) + t.Logf("serversUpdatedCB: nodeID=%v, servers=%v", nodeID, servers) sm.servers[nodeID] = servers }, func(pk *cryptolib.PublicKey) {}, @@ -161,15 +161,14 @@ func (sm *accessMgrSM) Check(t *rapid.T) { func TestAccessMgrRapid(t *testing.T) { tests := []struct { n int - c int }{ - {n: 1, c: 1}, - {n: 2, c: 1}, - {n: 4, c: 3}, + {n: 1}, + {n: 2}, + {n: 4}, } for _, test := range tests { - t.Run(fmt.Sprintf("N%d C%d", test.n, test.c), rapid.MakeCheck(func(t *rapid.T) { - sm := newAccessMgrSM(t, test.n, test.c) + t.Run(fmt.Sprintf("N%d", test.n), rapid.MakeCheck(func(t *rapid.T) { + sm := newAccessMgrSM(t, test.n) t.Repeat(rapid.StateMachineActions(sm)) })) } diff --git a/packages/chains/chains.go b/packages/chains/chains.go index ea463c505f..ac38c1ebdf 100644 --- a/packages/chains/chains.go +++ b/packages/chains/chains.go @@ -411,7 +411,7 @@ func (c *ChainRunner) Deactivate() error { } if _, err := c.chainRecordRegistryProvider.DeactivateChainRecord(); err != nil { - return fmt.Errorf("cannot deactivate chain %v: %w", err) + return fmt.Errorf("cannot deactivate chain %v: %w", c.chain.ID(), err) } c.chainCancelFunc() diff --git a/packages/nodeconn/nodeconn.go b/packages/nodeconn/nodeconn.go index 11f5692ab3..8f46319a24 100644 --- a/packages/nodeconn/nodeconn.go +++ b/packages/nodeconn/nodeconn.go @@ -120,7 +120,7 @@ func (nc *nodeConnection) AttachChain( } if err := ncc.syncChainState(ctx); err != nil { - nc.LogError(fmt.Sprintf("synchronizing chain state %s failed: %s", err.Error())) + nc.LogError(fmt.Sprintf("synchronizing chain state %s failed: %s", chainID, err.Error())) nc.shutdownHandler.SelfShutdown( fmt.Sprintf("Cannot sync chain %s with L1, %s", ncc.chainID, err.Error()), true) From be39c1779af84c51ff94a44016979d607d4dea7b Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Wed, 13 Aug 2025 02:13:13 -0700 Subject: [PATCH 08/27] Fixed some of tests --- components/webapi/webapi_test.go | 4 +- .../chain/statemanager/gpa/utils/block_wal.go | 5 +- .../gpa/utils/block_wal_rapid_test.go | 10 ++-- .../statemanager/gpa/utils/block_wal_test.go | 52 ++++++++++--------- .../accessmanager/dist/access_manager_dist.go | 14 ++--- packages/chains/chains.go | 2 +- 6 files changed, 47 insertions(+), 40 deletions(-) diff --git a/components/webapi/webapi_test.go b/components/webapi/webapi_test.go index 700a0a48e4..93801b1d3d 100644 --- a/components/webapi/webapi_test.go +++ b/components/webapi/webapi_test.go @@ -46,8 +46,6 @@ func TestInternalServerErrors(t *testing.T) { log.NewLogger(log.WithHandler(logger)), ) - time.Sleep(5 * time.Second) - // Add an endpoint that just panics with "foobar" and start the server exceptionText := "foobar" e.GET("/test", func(c echo.Context) error { panic(exceptionText) }) @@ -57,6 +55,8 @@ func TestInternalServerErrors(t *testing.T) { }() defer e.Shutdown(context.Background()) + time.Sleep(5 * time.Second) + // query the endpoint req, err := http.NewRequest(http.MethodGet, "http://localhost:9999/test", http.NoBody) require.NoError(t, err) diff --git a/packages/chain/statemanager/gpa/utils/block_wal.go b/packages/chain/statemanager/gpa/utils/block_wal.go index f5c939fcb2..73edf1cc18 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal.go +++ b/packages/chain/statemanager/gpa/utils/block_wal.go @@ -15,6 +15,7 @@ import ( "github.com/iotaledger/hive.go/log" "github.com/iotaledger/hive.go/runtime/ioutils" + "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/metrics" "github.com/iotaledger/wasp/v2/packages/state" "github.com/iotaledger/wasp/v2/packages/util/rwutil" @@ -32,7 +33,9 @@ const ( constBlockWALTmpFileSuffix = ".tmp" ) -func NewBlockWAL(log log.Logger, dir string, metrics *metrics.ChainBlockWALMetrics) (BlockWAL, error) { +// Chain kept for backward compatibility +func NewBlockWAL(log log.Logger, baseDir string, chainID isc.ChainID, metrics *metrics.ChainBlockWALMetrics) (BlockWAL, error) { + dir := filepath.Join(baseDir, chainID.String()) if err := ioutils.CreateDirectory(dir, 0o777); err != nil { return nil, fmt.Errorf("BlockWAL cannot create folder %v: %w", dir, err) } diff --git a/packages/chain/statemanager/gpa/utils/block_wal_rapid_test.go b/packages/chain/statemanager/gpa/utils/block_wal_rapid_test.go index f2c090ea13..9e3c8ac6a0 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal_rapid_test.go +++ b/packages/chain/statemanager/gpa/utils/block_wal_rapid_test.go @@ -34,7 +34,7 @@ func newBlockWALTestSM(t *rapid.T) *blockWALTestSM { bwtsmT.factory = NewBlockFactory(t) bwtsmT.lastBlockCommitment = bwtsmT.factory.GetOriginBlock().L1Commitment() bwtsmT.log = testlogger.NewLogger(t) - bwtsmT.bw, err = NewBlockWAL(bwtsmT.log, constTestFolder, mockBlockWALMetrics()) + bwtsmT.bw, err = NewBlockWAL(bwtsmT.log, constTestFolder, bwtsmT.factory.GetChainID(), mockBlockWALMetrics()) require.NoError(t, err) bwtsmT.blocks = make(map[state.BlockHash]state.Block) bwtsmT.blocksMoved = make([]state.BlockHash, 0) @@ -105,8 +105,8 @@ func (bwtsmT *blockWALTestSM) MoveBlock(t *rapid.T) { if blockHashOrig.Equals(blockHashToDamage) { t.Skip() } - fileOrigPath := walPathFromHash(blockHashOrig) - fileToDamagePath := walPathFromHash(blockHashToDamage) + fileOrigPath := walPathFromHash(bwtsmT.factory.GetChainID(), blockHashOrig) + fileToDamagePath := walPathFromHash(bwtsmT.factory.GetChainID(), blockHashToDamage) data, err := os.ReadFile(fileOrigPath) require.NoError(t, err) err = os.WriteFile(fileToDamagePath, data, 0o644) @@ -122,7 +122,7 @@ func (bwtsmT *blockWALTestSM) DamageBlock(t *rapid.T) { t.Skip() } blockHash := rapid.SampledFrom(blockHashes).Example() - filePath := walPathFromHash(blockHash) + filePath := walPathFromHash(bwtsmT.factory.GetChainID(), blockHash) data := make([]byte, 50) _, err := rand.Read(data) require.NoError(t, err) @@ -171,7 +171,7 @@ func (bwtsmT *blockWALTestSM) ReadDamagedBlock(t *rapid.T) { func (bwtsmT *blockWALTestSM) Restart(t *rapid.T) { var err error - bwtsmT.bw, err = NewBlockWAL(bwtsmT.log, constTestFolder, mockBlockWALMetrics()) + bwtsmT.bw, err = NewBlockWAL(bwtsmT.log, constTestFolder, bwtsmT.factory.GetChainID(), mockBlockWALMetrics()) require.NoError(t, err) t.Log("Block WAL restarted") } diff --git a/packages/chain/statemanager/gpa/utils/block_wal_test.go b/packages/chain/statemanager/gpa/utils/block_wal_test.go index 4a6cfc100c..2a1c9e1def 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal_test.go +++ b/packages/chain/statemanager/gpa/utils/block_wal_test.go @@ -8,6 +8,8 @@ import ( "github.com/stretchr/testify/require" bcs "github.com/iotaledger/bcs-go" + "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/state" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" ) @@ -22,9 +24,9 @@ func TestBlockWALBasic(t *testing.T) { factory := NewBlockFactory(t) blocks := factory.GetBlocks(5, 1) blocksInWAL := blocks[:4] - walGood, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) + walGood, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) require.NoError(t, err) - walBad, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) + walBad, err := NewBlockWAL(log, constTestFolder, isctest.RandomChainID(), mockBlockWALMetrics()) require.NoError(t, err) for i := range blocksInWAL { err = walGood.Write(blocks[i]) @@ -57,9 +59,9 @@ func TestBlockWALLegacy(t *testing.T) { factory := NewBlockFactory(t) blocks := factory.GetBlocks(4, 1) - wal, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) + wal, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) require.NoError(t, err) - writeBlocksLegacy(t, blocks) + writeBlocksLegacy(t, factory.GetChainID(), blocks) for i := range blocks { block, err := wal.Read(blocks[i].Hash()) require.NoError(t, err) @@ -75,15 +77,15 @@ func TestBlockWALNoSubfolder(t *testing.T) { factory := NewBlockFactory(t) blocks := factory.GetBlocks(4, 1) - wal, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) + wal, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) require.NoError(t, err) for i := range blocks { err = wal.Write(blocks[i]) require.NoError(t, err) } for _, block := range blocks { - pathWithSubfolder := walPathFromHash(block.Hash()) - pathNoSubfolder := walPathNoSubfolderFromHash(block.Hash()) + pathWithSubfolder := walPathFromHash(factory.GetChainID(), block.Hash()) + pathNoSubfolder := walPathNoSubfolderFromHash(factory.GetChainID(), block.Hash()) err = os.Rename(pathWithSubfolder, pathNoSubfolder) require.NoError(t, err) } @@ -103,14 +105,14 @@ func TestBlockWALOverwrite(t *testing.T) { factory := NewBlockFactory(t) blocks := factory.GetBlocks(4, 1) - wal, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) + wal, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) require.NoError(t, err) for i := range blocks { err = wal.Write(blocks[i]) require.NoError(t, err) } - file0Path := walPathFromHash(blocks[0].Hash()) - file1Path := walPathFromHash(blocks[1].Hash()) + file0Path := walPathFromHash(factory.GetChainID(), blocks[0].Hash()) + file1Path := walPathFromHash(factory.GetChainID(), blocks[1].Hash()) err = os.Rename(file1Path, file0Path) require.NoError(t, err) // block[1] is no longer in WAL @@ -141,7 +143,7 @@ func TestBlockWALRestart(t *testing.T) { factory := NewBlockFactory(t) blocks := factory.GetBlocks(4, 1) - wal, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) + wal, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) require.NoError(t, err) for i := range blocks { err = wal.Write(blocks[i]) @@ -149,7 +151,7 @@ func TestBlockWALRestart(t *testing.T) { } // Restart: WAL object is recreated - wal, err = NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) + wal, err = NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) require.NoError(t, err) for i := range blocks { require.True(t, wal.Contains(blocks[i].Hash())) @@ -159,7 +161,7 @@ func TestBlockWALRestart(t *testing.T) { } } -func testReadAllByStateIndex(t *testing.T, addToWALFun func(BlockWAL, []state.Block)) { +func testReadAllByStateIndex(t *testing.T, addToWALFun func(isc.ChainID, BlockWAL, []state.Block)) { log := testlogger.NewLogger(t) defer log.Shutdown() defer cleanupAfterTest(t) @@ -170,10 +172,10 @@ func testReadAllByStateIndex(t *testing.T, addToWALFun func(BlockWAL, []state.Bl branchBlockIndex := mainBlocks - branchBlocks - 1 blocksMain := factory.GetBlocks(mainBlocks, 1) blocksBranch := factory.GetBlocksFrom(branchBlocks, 1, blocksMain[branchBlockIndex].L1Commitment(), 2) - wal, err := NewBlockWAL(log, constTestFolder, mockBlockWALMetrics()) + wal, err := NewBlockWAL(log, constTestFolder, factory.GetChainID(), mockBlockWALMetrics()) require.NoError(t, err) - addToWALFun(wal, blocksMain) - addToWALFun(wal, blocksBranch) + addToWALFun(factory.GetChainID(), wal, blocksMain) + addToWALFun(factory.GetChainID(), wal, blocksBranch) var blocksRead []state.Block err = wal.ReadAllByStateIndex(func(stateIndex uint32, block state.Block) bool { @@ -202,7 +204,7 @@ func testReadAllByStateIndex(t *testing.T, addToWALFun func(BlockWAL, []state.Bl } func TestReadAllByStateIndexV1(t *testing.T) { - testReadAllByStateIndex(t, func(wal BlockWAL, blocks []state.Block) { + testReadAllByStateIndex(t, func(chainID isc.ChainID, wal BlockWAL, blocks []state.Block) { for _, block := range blocks { err := wal.Write(block) require.NoError(t, err) @@ -211,22 +213,22 @@ func TestReadAllByStateIndexV1(t *testing.T) { } func TestReadAllByStateIndexLegacy(t *testing.T) { - testReadAllByStateIndex(t, func(wal BlockWAL, blocks []state.Block) { - writeBlocksLegacy(t, blocks) + testReadAllByStateIndex(t, func(chainID isc.ChainID, wal BlockWAL, blocks []state.Block) { + writeBlocksLegacy(t, chainID, blocks) }) } -func walPathFromHash(blockHash state.BlockHash) string { - return filepath.Join(constTestFolder, blockWALSubFolderName(blockHash), blockWALFileName(blockHash)) +func walPathFromHash(chainID isc.ChainID, blockHash state.BlockHash) string { + return filepath.Join(constTestFolder, chainID.String(), blockWALSubFolderName(blockHash), blockWALFileName(blockHash)) } -func walPathNoSubfolderFromHash(blockHash state.BlockHash) string { - return filepath.Join(constTestFolder, blockWALFileName(blockHash)) +func walPathNoSubfolderFromHash(chainID isc.ChainID, blockHash state.BlockHash) string { + return filepath.Join(constTestFolder, chainID.String(), blockWALFileName(blockHash)) } -func writeBlocksLegacy(t *testing.T, blocks []state.Block) { +func writeBlocksLegacy(t *testing.T, chainID isc.ChainID, blocks []state.Block) { for _, block := range blocks { - filePath := walPathNoSubfolderFromHash(block.Hash()) + filePath := walPathNoSubfolderFromHash(chainID, block.Hash()) f, err := os.OpenFile(filePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0o666) require.NoError(t, err) err = bcs.MarshalStream(&block, f) diff --git a/packages/chains/accessmanager/dist/access_manager_dist.go b/packages/chains/accessmanager/dist/access_manager_dist.go index f489db204b..f63bdf1fdf 100644 --- a/packages/chains/accessmanager/dist/access_manager_dist.go +++ b/packages/chains/accessmanager/dist/access_manager_dist.go @@ -155,7 +155,7 @@ func (amd *accessMgrDist) handleInputTrustedNodes(input *inputTrustedNodes) gpa. continue } hasAccess := false - if amd.chain.IsAccessGrantedFor(trustedNodeID) { + if amd.chain != nil && amd.chain.IsAccessGrantedFor(trustedNodeID) { hasAccess = true } trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, hasAccess) @@ -168,9 +168,10 @@ func (amd *accessMgrDist) handleInputTrustedNodes(input *inputTrustedNodes) gpa. if _, ok := trustedIndex[nodeID]; ok { return true } - amd.chain.MarkAsServerFor(node.pubKey, false) - msgs.AddAll(node.SetChainAccess(false)) - + if amd.chain != nil { + amd.chain.MarkAsServerFor(node.pubKey, false) + msgs.AddAll(node.SetChainAccess(false)) + } amd.nodes.Delete(nodeID) amd.dismissPeerCB(node.pubKey) return true @@ -185,7 +186,9 @@ func (amd *accessMgrDist) handleMsgAccess(msg *msgAccess) gpa.OutMessages { } msgs := node.handleMsgAccess(msg) - amd.chain.MarkAsServerFor(node.pubKey, node.isServer) + if amd.chain != nil { + amd.chain.MarkAsServerFor(node.pubKey, node.isServer) + } return msgs } @@ -201,7 +204,6 @@ type accessMgrChain struct { } func newAccessMgrChain( - pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID, initialServers []*cryptolib.PublicKey, serversUpdatedCB func([]*cryptolib.PublicKey), diff --git a/packages/chains/chains.go b/packages/chains/chains.go index ac38c1ebdf..9ffe687725 100644 --- a/packages/chains/chains.go +++ b/packages/chains/chains.go @@ -301,7 +301,7 @@ func (c *ChainRunner) activateWithoutLocking() error { //nolint:funlen chainLog := c.log.NewChildLogger(chainID.ShortString()) var chainWAL utils.BlockWAL if c.walEnabled { - chainWAL, err = utils.NewBlockWAL(chainLog, c.walFolderPath, chainMetrics.BlockWAL) + chainWAL, err = utils.NewBlockWAL(chainLog, c.walFolderPath, chainID, chainMetrics.BlockWAL) if err != nil { panic(fmt.Errorf("cannot create WAL: %w", err)) } From c1a6d081f9847c698c631e8bf144a8ebd4e37bab Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Mon, 18 Aug 2025 08:05:21 -0700 Subject: [PATCH 09/27] Returned chain ID into off ledger request and call context --- clients/chainclient/chainclient.go | 2 +- packages/chain/cons/bp/batch_proposal_test.go | 2 +- packages/chain/cons/bp/bp_test.go | 9 ++++---- packages/chain/cons/gr/gr_test.go | 2 +- .../chain/mempool/distsync/dist_sync_test.go | 2 ++ .../distsync/msg_missing_request_test.go | 4 +++- .../distsync/msg_share_request_test.go | 4 ++-- packages/chain/mempool/mempool_test.go | 7 +++++++ packages/chain/mempool/offledger_pool_test.go | 21 ++++++++++--------- packages/chain/mempool/wait_req_test.go | 7 ++++--- packages/chain/node_test.go | 1 + packages/chainutil/callview.go | 4 ++-- .../evm/jsonrpc/jsonrpctest/jsonrpc_test.go | 18 ++++++++-------- packages/isc/request_evmtx.go | 16 +++++++++----- packages/isc/request_offledger.go | 3 +++ packages/isc/request_offledger_test.go | 5 +++-- packages/isc/request_test.go | 20 ++++++++++-------- packages/isc/sandbox_interface.go | 2 ++ packages/solo/evm.go | 2 +- packages/solo/req.go | 6 +++++- packages/testutil/dummyrequest.go | 10 ++++----- packages/vm/core/blocklog/blocklog_test.go | 3 ++- packages/vm/core/blocklog/interface_test.go | 6 +++--- packages/vm/core/blocklog/receipt_test.go | 4 ++++ .../core/evm/evmimpl/iscmagic_sandbox_view.go | 5 +++++ packages/vm/core/evm/evmtest/bench_test.go | 2 +- packages/vm/core/evm/evmtest/evm_test.go | 2 +- packages/vm/core/testcore/base_test.go | 5 +++-- packages/vm/execution/interface.go | 1 + packages/vm/sandbox/sandboxbase.go | 5 +++++ packages/vm/viewcontext/viewcontext.go | 8 ++++++- packages/webapi/common/vm.go | 2 +- packages/webapi/services/waspevmbackend.go | 7 ++++++- packages/webapi/test/offledger_test.go | 2 +- tools/cluster/tests/estimategas_test.go | 1 + tools/cluster/tests/missing_requests_test.go | 5 +++-- 36 files changed, 134 insertions(+), 71 deletions(-) diff --git a/clients/chainclient/chainclient.go b/clients/chainclient/chainclient.go index fa7c05c0c9..b48214aeb6 100644 --- a/clients/chainclient/chainclient.go +++ b/clients/chainclient/chainclient.go @@ -189,7 +189,7 @@ func (c *Client) PostOffLedgerRequest( } par.Nonce = nonce } - req := isc.NewOffLedgerRequest(msg, par.Nonce, par.GetL2GasBudget()) + req := isc.NewOffLedgerRequest(c.ChainID, msg, par.Nonce, par.GetL2GasBudget()) req.WithAllowance(par.Allowance) req.WithNonce(par.Nonce) signed := req.Sign(c.KeyPair) diff --git a/packages/chain/cons/bp/batch_proposal_test.go b/packages/chain/cons/bp/batch_proposal_test.go index fa883706ff..4f676b7bb3 100644 --- a/packages/chain/cons/bp/batch_proposal_test.go +++ b/packages/chain/cons/bp/batch_proposal_test.go @@ -24,7 +24,7 @@ import ( func TestBatchProposal1Serialization(t *testing.T) { var reqRefs []*isc.RequestRef for i := uint64(0); i < 5; i++ { - req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14), i, 200).Sign(cryptolib.NewKeyPair()) + req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14), i, 200).Sign(cryptolib.NewKeyPair()) reqRefs = append(reqRefs, &isc.RequestRef{ ID: req.ID(), Hash: hashing.PseudoRandomHash(nil), diff --git a/packages/chain/cons/bp/bp_test.go b/packages/chain/cons/bp/bp_test.go index 099b78ed80..7487f545e4 100644 --- a/packages/chain/cons/bp/bp_test.go +++ b/packages/chain/cons/bp/bp_test.go @@ -27,6 +27,7 @@ func TestOffLedgerOrdering(t *testing.T) { nodeIDs := gpa.MakeTestNodeIDs(1) // // Produce an anchor. + chainID := isc.ChainIDFromObjectID(*iotatest.RandomObjectRef().ObjectID) anchor0 := isctest.RandomStateAnchor() // Create some requests. @@ -34,10 +35,10 @@ func TestOffLedgerOrdering(t *testing.T) { contract := governance.Contract.Hname() entryPoint := governance.FuncAddCandidateNode.Hname() gasBudget := gas.LimitsDefault.MaxGasPerRequest - r0 := isc.NewOffLedgerRequest(isc.NewMessage(contract, entryPoint, nil), 0, gasBudget).Sign(senderKP) - r1 := isc.NewOffLedgerRequest(isc.NewMessage(contract, entryPoint, nil), 1, gasBudget).Sign(senderKP) - r2 := isc.NewOffLedgerRequest(isc.NewMessage(contract, entryPoint, nil), 2, gasBudget).Sign(senderKP) - r3 := isc.NewOffLedgerRequest(isc.NewMessage(contract, entryPoint, nil), 3, gasBudget).Sign(senderKP) + r0 := isc.NewOffLedgerRequest(chainID, isc.NewMessage(contract, entryPoint, nil), 0, gasBudget).Sign(senderKP) + r1 := isc.NewOffLedgerRequest(chainID, isc.NewMessage(contract, entryPoint, nil), 1, gasBudget).Sign(senderKP) + r2 := isc.NewOffLedgerRequest(chainID, isc.NewMessage(contract, entryPoint, nil), 2, gasBudget).Sign(senderKP) + r3 := isc.NewOffLedgerRequest(chainID, isc.NewMessage(contract, entryPoint, nil), 3, gasBudget).Sign(senderKP) rs := []isc.Request{r3, r1, r0, r2} // Out of order. // // Construct the batch proposal, and aggregate it. diff --git a/packages/chain/cons/gr/gr_test.go b/packages/chain/cons/gr/gr_test.go index dbe60c6c09..de168ef45a 100644 --- a/packages/chain/cons/gr/gr_test.go +++ b/packages/chain/cons/gr/gr_test.go @@ -173,7 +173,7 @@ func testGrBasic(t *testing.T, n, f int, reliable bool) { for i := range nodes { nodes[i].Time(time.Now()) mempools[i].addRequests(anchor.GetObjectRef(), []isc.Request{ - isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(originator), + isc.NewOffLedgerRequest(anchor.ChainID(), isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(originator), }) stateMgrs[i].addOriginState(anchor) } diff --git a/packages/chain/mempool/distsync/dist_sync_test.go b/packages/chain/mempool/distsync/dist_sync_test.go index 9da973c2f6..b232aa3b24 100644 --- a/packages/chain/mempool/distsync/dist_sync_test.go +++ b/packages/chain/mempool/distsync/dist_sync_test.go @@ -14,6 +14,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" "github.com/iotaledger/wasp/v2/packages/vm/gas" ) @@ -47,6 +48,7 @@ func testBasic(t *testing.T, n, cmtN, cmtF int) { } req := isc.NewOffLedgerRequest( + isctest.RandomChainID(), isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 0, gas.LimitsDefault.MaxGasPerRequest, diff --git a/packages/chain/mempool/distsync/msg_missing_request_test.go b/packages/chain/mempool/distsync/msg_missing_request_test.go index 82cc9d7615..21145cdb00 100644 --- a/packages/chain/mempool/distsync/msg_missing_request_test.go +++ b/packages/chain/mempool/distsync/msg_missing_request_test.go @@ -10,6 +10,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/vm/core/governance" "github.com/iotaledger/wasp/v2/packages/vm/gas" ) @@ -19,7 +20,7 @@ func TestMsgMissingRequestSerialization(t *testing.T) { contract := governance.Contract.Hname() entryPoint := governance.FuncAddCandidateNode.Hname() gasBudget := gas.LimitsDefault.MaxGasPerRequest - req := isc.NewOffLedgerRequest(isc.NewMessage(contract, entryPoint, nil), 0, gasBudget).Sign(senderKP) + req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(contract, entryPoint, nil), 0, gasBudget).Sign(senderKP) msg := &msgMissingRequest{ gpa.BasicMessage{}, @@ -32,6 +33,7 @@ func TestMsgMissingRequestSerialization(t *testing.T) { gpa.BasicMessage{}, isc.RequestRefFromRequest( isc.NewOffLedgerRequest( + isctest.TestChainID, isc.NewMessage(contract, entryPoint, nil), 0, gasBudget, diff --git a/packages/chain/mempool/distsync/msg_share_request_test.go b/packages/chain/mempool/distsync/msg_share_request_test.go index e1d482e9f6..3644841afb 100644 --- a/packages/chain/mempool/distsync/msg_share_request_test.go +++ b/packages/chain/mempool/distsync/msg_share_request_test.go @@ -19,7 +19,7 @@ import ( func TestMsgShareRequestSerialization(t *testing.T) { { - req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments([]byte{1, 2, 3})), 1337, 100).Sign(cryptolib.NewKeyPair()) + req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14, isc.NewCallArguments([]byte{1, 2, 3})), 1337, 100).Sign(cryptolib.NewKeyPair()) msg := &msgShareRequest{ gpa.BasicMessage{}, byte(rand.Intn(math.MaxUint8)), @@ -29,7 +29,7 @@ func TestMsgShareRequestSerialization(t *testing.T) { bcs.TestCodec(t, msg) } { - req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments([]byte{1, 2, 3})), 1337, 100).Sign(cryptolib.TestKeyPair) + req := isc.NewOffLedgerRequest(isctest.TestChainID, isc.NewMessage(3, 14, isc.NewCallArguments([]byte{1, 2, 3})), 1337, 100).Sign(cryptolib.TestKeyPair) msg := &msgShareRequest{ gpa.BasicMessage{}, 123, diff --git a/packages/chain/mempool/mempool_test.go b/packages/chain/mempool/mempool_test.go index 10fe7a89aa..ebb5ac9c6c 100644 --- a/packages/chain/mempool/mempool_test.go +++ b/packages/chain/mempool/mempool_test.go @@ -115,6 +115,7 @@ func testMempoolBasic(t *testing.T, n, f int, reliable bool) { te.anchor = blockFn(te, []isc.Request{onLedgerReq}, te.anchor, tangleTime) offLedgerReq := isc.NewOffLedgerRequest( + te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), 0, gas.LimitsDefault.MaxGasPerRequest, @@ -164,6 +165,7 @@ func testMempoolBasic(t *testing.T, n, f int, reliable bool) { // // Add a message, we should get it now. offLedgerReq2 := isc.NewOffLedgerRequest( + te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), 1, gas.LimitsDefault.MaxGasPerRequest, @@ -218,6 +220,7 @@ func TestMempoolsNonceGaps(t *testing.T) { // send nonces 0,1,3,6,10 createReqWithNonce := func(nonce uint64) isc.OffLedgerRequest { return isc.NewOffLedgerRequest( + te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), nonce, gas.LimitsDefault.MaxGasPerRequest, @@ -330,6 +333,7 @@ func TestMempoolsNonceGaps(t *testing.T) { t.Run("request with not enough funds is rejected", func(t *testing.T) { kp := cryptolib.NewKeyPair() req := isc.NewOffLedgerRequest( + te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), 0, gas.LimitsDefault.MaxGasPerRequest, @@ -398,6 +402,7 @@ func TestMempoolOverrideNonce(t *testing.T) { te.anchor = blockFn(te, []isc.Request{onLedgerReq}, te.anchor, tangleTime) initialReq := isc.NewOffLedgerRequest( + te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), 0, gas.LimitsDefault.MaxGasPerRequest, @@ -407,6 +412,7 @@ func TestMempoolOverrideNonce(t *testing.T) { time.Sleep(200 * time.Millisecond) // give some time for the requests to reach the pool overwritingReq := isc.NewOffLedgerRequest( + te.chainID, isc.NewMessage(isc.Hn("baz"), isc.Hn("bar"), isc.NewCallArguments()), 0, gas.LimitsDefault.MaxGasPerRequest, @@ -463,6 +469,7 @@ func TestTTL(t *testing.T) { // send offledger request, assert it is returned, make 201ms pass, assert it is not returned anymore offLedgerReq := isc.NewOffLedgerRequest( + te.chainID, isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), isc.NewCallArguments()), 0, gas.LimitsDefault.MaxGasPerRequest, diff --git a/packages/chain/mempool/offledger_pool_test.go b/packages/chain/mempool/offledger_pool_test.go index b549e46f79..d6ae600f57 100644 --- a/packages/chain/mempool/offledger_pool_test.go +++ b/packages/chain/mempool/offledger_pool_test.go @@ -12,6 +12,7 @@ import ( consGR "github.com/iotaledger/wasp/v2/packages/chain/cons/gr" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil" "github.com/iotaledger/wasp/v2/packages/testutil/testkey" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" @@ -25,10 +26,10 @@ func TestOffledgerMempoolAccountNonce(t *testing.T) { kp, addr := testkey.GenKeyAddr() agentID := isc.NewAddressAgentID(addr) - req0 := testutil.DummyOffledgerRequestForAccount(0, kp) - req1 := testutil.DummyOffledgerRequestForAccount(1, kp) - req2 := testutil.DummyOffledgerRequestForAccount(2, kp) - req2new := testutil.DummyOffledgerRequestForAccount(2, kp) + req0 := testutil.DummyOffledgerRequestForAccount(isctest.RandomChainID(), 0, kp) + req1 := testutil.DummyOffledgerRequestForAccount(isctest.RandomChainID(), 1, kp) + req2 := testutil.DummyOffledgerRequestForAccount(isctest.RandomChainID(), 2, kp) + req2new := testutil.DummyOffledgerRequestForAccount(isctest.RandomChainID(), 2, kp) pool.Add(req0) pool.Add(req1) pool.Add(req1) // try to add the same request many times, old will be replaced. @@ -67,9 +68,9 @@ func TestOffledgerMempoolLimit(t *testing.T) { pool := NewOffledgerPool(poolSizeLimit, poolSizeLimit, waitReq, func(int) {}, func(time.Duration) {}, testlogger.NewSilentLogger("", true)) // create requests with different gas prices - req0 := testutil.DummyEVMRequest(big.NewInt(1)) - req1 := testutil.DummyEVMRequest(big.NewInt(2)) - req2 := testutil.DummyEVMRequest(big.NewInt(3)) + req0 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(1)) + req1 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(2)) + req2 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(3)) pool.Add(req0) pool.Add(req1) pool.Add(req2) @@ -90,17 +91,17 @@ func TestOffledgerMempoolLimit(t *testing.T) { assertPoolSize() // add a request with high - req3 := testutil.DummyEVMRequest(big.NewInt(3)) + req3 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(3)) pool.Add(req3) assertPoolSize() contains(req1, req2, req3) // assert req3 was added and req0 was removed - req4 := testutil.DummyEVMRequest(big.NewInt(1)) + req4 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(1)) pool.Add(req4) assertPoolSize() contains(req1, req2, req3) // assert req4 is not added - req5 := testutil.DummyEVMRequest(big.NewInt(4)) + req5 := testutil.DummyEVMRequest(isctest.RandomChainID(), big.NewInt(4)) pool.Add(req5) assertPoolSize() diff --git a/packages/chain/mempool/wait_req_test.go b/packages/chain/mempool/wait_req_test.go index 5a6a733a42..af3a590925 100644 --- a/packages/chain/mempool/wait_req_test.go +++ b/packages/chain/mempool/wait_req_test.go @@ -12,6 +12,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/chain/mempool" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/vm/gas" ) @@ -20,9 +21,9 @@ func TestWaitReq(t *testing.T) { ctxA := context.Background() ctxM := context.Background() - req0 := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) - req1 := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 1, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) - req2 := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 2, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) + req0 := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) + req1 := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 1, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) + req2 := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(isc.Hn("foo"), isc.Hn("bar"), nil), 2, gas.LimitsDefault.MaxGasPerRequest).Sign(kp) ref0 := isc.RequestRefFromRequest(req0) ref1 := isc.RequestRefFromRequest(req1) ref2 := isc.RequestRefFromRequest(req2) diff --git a/packages/chain/node_test.go b/packages/chain/node_test.go index 2c4374c72c..a02f3ae50f 100644 --- a/packages/chain/node_test.go +++ b/packages/chain/node_test.go @@ -196,6 +196,7 @@ func testNodeBasic(t *testing.T, n, f int, reliable bool, timeout time.Duration, // That's because the gossip in the mempool is primitive for now. for ii := range incCount { scRequest := isc.NewOffLedgerRequest( + te.chainID, inccounter.FuncIncCounter.Message(nil), uint64(ii), 20000, diff --git a/packages/chainutil/callview.go b/packages/chainutil/callview.go index 4d8d4d2d4c..9d8a0de2c8 100644 --- a/packages/chainutil/callview.go +++ b/packages/chainutil/callview.go @@ -11,13 +11,13 @@ import ( // CallView executes a view call on the latest block of the chain func CallView( - + chainID isc.ChainID, chainState state.State, processors *processors.Config, log log.Logger, msg isc.Message, ) (isc.CallArguments, error) { - vctx, err := viewcontext.New(chainState, processors, log, false) + vctx, err := viewcontext.New(chainID, chainState, processors, log, false) if err != nil { return nil, err } diff --git a/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go b/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go index de077ad894..f67d95d176 100644 --- a/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go +++ b/packages/evm/jsonrpc/jsonrpctest/jsonrpc_test.go @@ -546,7 +546,7 @@ func TestRPCEthChainID(t *testing.T) { var chainID hexutil.Uint err := env.RawClient.Call(&chainID, "eth_chainId") require.NoError(t, err) - require.EqualValues(t, chainID, evm.DefaultChainID) + require.EqualValues(t, evm.DefaultChainID, chainID) } func TestRPCTxRejectedIfNotEnoughFunds(t *testing.T) { @@ -633,8 +633,8 @@ func TestRPCTraceTx(t *testing.T) { Data: lo.Must(contractABI.Pack("sendTo", common.Address{0x2}, big.NewInt(1))), }) - req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx1)) - req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx2)) + req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx1)) + req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx2)) env.soloChain.RunRequestsSync([]isc.Request{req1, req2}) @@ -839,7 +839,7 @@ func addNRequests(n int, env *soloTestEnv, creator *ecdsa.PrivateKey, creatorAdd Data: lo.Must(contractABI.Pack("sendTo", common.Address{0x1}, big.NewInt(2))), }) - req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx1)) + req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx1)) rqs = append(rqs, req1) } @@ -938,8 +938,8 @@ func TestRPCTraceBlock(t *testing.T) { Data: lo.Must(contractABI.Pack("sendTo", common.Address{0x2}, big.NewInt(3))), }) - req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx1)) - req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx2)) + req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx1)) + req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx2)) env.soloChain.RunRequestsSync([]isc.Request{req1, req2}) bi := env.soloChain.GetLatestBlockInfo() @@ -1147,7 +1147,7 @@ func TestRPCTraceBlockSingleCall(t *testing.T) { Data: lo.Must(contractABI.Pack("sendTo", common.Address{0x1}, big.NewInt(2))), }) - req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx1)) + req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx1)) env.soloChain.RunRequestsSync([]isc.Request{req1}) bi := env.soloChain.GetLatestBlockInfo() @@ -1241,8 +1241,8 @@ func TestRPCBlockReceipt(t *testing.T) { Data: lo.Must(contractABI.Pack("sendTo", common.Address{0x2}, big.NewInt(3))), }) - req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx1)) - req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(tx2)) + req1 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx1)) + req2 := lo.Must(isc.NewEVMOffLedgerTxRequest(env.soloChain.ChainID, tx2)) env.soloChain.RunRequestsSync([]isc.Request{req1, req2}) bi := env.soloChain.GetLatestBlockInfo() diff --git a/packages/isc/request_evmtx.go b/packages/isc/request_evmtx.go index 3e08149006..4c5057bcee 100644 --- a/packages/isc/request_evmtx.go +++ b/packages/isc/request_evmtx.go @@ -17,20 +17,22 @@ import ( // evmOffLedgerTxRequest is used to wrap an EVM tx type evmOffLedgerTxRequest struct { - tx *types.Transaction `bcs:"export"` - sender *EthereumAddressAgentID // not serialized + chainID ChainID `bcs:"export"` + tx *types.Transaction `bcs:"export"` + sender *EthereumAddressAgentID // not serialized } var _ OffLedgerRequest = &evmOffLedgerTxRequest{} -func NewEVMOffLedgerTxRequest(tx *types.Transaction) (OffLedgerRequest, error) { +func NewEVMOffLedgerTxRequest(chainID ChainID, tx *types.Transaction) (OffLedgerRequest, error) { sender, err := evmutil.GetSender(tx) if err != nil { return nil, err } return &evmOffLedgerTxRequest{ - tx: tx, - sender: NewEthereumAddressAgentID(sender), + chainID: chainID, + tx: tx, + sender: NewEthereumAddressAgentID(sender), }, nil } @@ -65,6 +67,10 @@ func (req *evmOffLedgerTxRequest) Message() Message { ) } +func (req *evmOffLedgerTxRequest) ChainID() ChainID { + return req.chainID +} + func (req *evmOffLedgerTxRequest) GasBudget() (gas uint64, isEVM bool) { return req.tx.Gas(), true } diff --git a/packages/isc/request_offledger.go b/packages/isc/request_offledger.go index eada2fbfa1..fe107144d3 100644 --- a/packages/isc/request_offledger.go +++ b/packages/isc/request_offledger.go @@ -18,6 +18,7 @@ import ( // OffLedgerRequestDataEssence implements UnsignedOffLedgerRequest type OffLedgerRequestDataEssence struct { allowance *Assets `bcs:"export,optional"` + chainID ChainID `bcs:"export"` msg Message `bcs:"export"` gasBudget uint64 `bcs:"export"` nonce uint64 `bcs:"export"` @@ -67,11 +68,13 @@ func (r *ImpersonatedOffLedgerRequestData) SenderAccount() AgentID { } func NewOffLedgerRequest( + chainID ChainID, msg Message, nonce uint64, gasBudget uint64, ) UnsignedOffLedgerRequest { return &OffLedgerRequestDataEssence{ + chainID: chainID, msg: msg, nonce: nonce, allowance: NewEmptyAssets(), diff --git a/packages/isc/request_offledger_test.go b/packages/isc/request_offledger_test.go index e8530d04e3..25b59c825c 100644 --- a/packages/isc/request_offledger_test.go +++ b/packages/isc/request_offledger_test.go @@ -6,12 +6,13 @@ import ( bcs "github.com/iotaledger/bcs-go" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" ) func TestOffLedgerRequestCodec(t *testing.T) { - offLedgerRequest := isc.NewOffLedgerRequest(isc.NewMessage(3, 14), 123, 200).Sign(cryptolib.NewKeyPair()) + offLedgerRequest := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14), 123, 200).Sign(cryptolib.NewKeyPair()) bcs.TestCodec(t, offLedgerRequest.(*isc.OffLedgerRequestData)) - offLedgerRequest = isc.NewOffLedgerRequest(isc.NewMessage(3, 14), 123, 200).Sign(cryptolib.TestKeyPair) + offLedgerRequest = isc.NewOffLedgerRequest(isctest.TestChainID, isc.NewMessage(3, 14), 123, 200).Sign(cryptolib.TestKeyPair) bcs.TestCodecAndHash(t, offLedgerRequest.(*isc.OffLedgerRequestData), "0b76ea31b34a") } diff --git a/packages/isc/request_test.go b/packages/isc/request_test.go index b1fe1e0d66..65bc216391 100644 --- a/packages/isc/request_test.go +++ b/packages/isc/request_test.go @@ -14,6 +14,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/hashing" "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/solo" "github.com/iotaledger/wasp/v2/packages/util/rwutil" "github.com/iotaledger/wasp/v2/packages/vm/core/accounts" @@ -23,7 +24,7 @@ import ( func TestImpersonatedOffLedgerRequest(t *testing.T) { requestFrom := cryptolib.NewRandomAddress() - req := isc.NewOffLedgerRequest(isc.NewMessage(isc.HnameNil, isc.HnameNil), 0, 0). + req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(isc.HnameNil, isc.HnameNil), 0, 0). WithAllowance(isc.NewAssets(1074)). WithNonce(1074). WithGasBudget(1074) @@ -38,7 +39,7 @@ func TestImpersonatedOffLedgerRequest(t *testing.T) { func TestRequestToJSONObject(t *testing.T) { pk, addr := solo.NewEthereumAccount() - req, err := isc.NewEVMOffLedgerTxRequest(types.MustSignNewTx(pk, types.NewEIP155Signer(big.NewInt(int64(1074))), + req, err := isc.NewEVMOffLedgerTxRequest(isc.EmptyChainID(), types.MustSignNewTx(pk, types.NewEIP155Signer(big.NewInt(int64(1074))), &types.LegacyTx{ Nonce: 0, To: &addr, @@ -55,6 +56,7 @@ func TestRequestToJSONObject(t *testing.T) { keyPair := cryptolib.NewKeyPair() tx2 := isc.NewOffLedgerRequest( + isc.EmptyChainID(), accounts.FuncTransferAllowanceTo.Message(isc.NewAddressAgentID(cryptolib.NewEmptyAddress())), 0, 1*isc.Million, @@ -66,7 +68,7 @@ func TestRequestToJSONObject(t *testing.T) { require.NotNil(t, obj2.SenderAccount) requestFrom := cryptolib.NewRandomAddress() - req3 := isc.NewOffLedgerRequest(isc.NewMessage(isc.HnameNil, isc.HnameNil), 0, 0) + req3 := isc.NewOffLedgerRequest(isc.EmptyChainID(), isc.NewMessage(isc.HnameNil, isc.HnameNil), 0, 0) impRequest := isc.NewImpersonatedOffLedgerRequest(req3.(*isc.OffLedgerRequestDataEssence)). WithSenderAddress(requestFrom) @@ -82,13 +84,13 @@ func TestRequestToJSONObject(t *testing.T) { func TestRequestDataSerialization(t *testing.T) { t.Run("off ledger", func(t *testing.T) { - req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14), 1337, 100).Sign(cryptolib.NewKeyPair()) + req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14), 1337, 100).Sign(cryptolib.NewKeyPair()) bcs.TestCodec(t, isc.Request(req)) rwutil.BytesTest(t, isc.Request(req), func(data []byte) (isc.Request, error) { return bcs.Unmarshal[isc.Request](data) }) - req = isc.NewOffLedgerRequest(isc.NewMessage(3, 14), 1337, 100).Sign(cryptolib.TestKeyPair) + req = isc.NewOffLedgerRequest(isctest.TestChainID, isc.NewMessage(3, 14), 1337, 100).Sign(cryptolib.TestKeyPair) bcs.TestCodecAndHash(t, isc.Request(req), "94051c6b730a") }) @@ -134,18 +136,18 @@ func TestRequestDataSerialization(t *testing.T) { } func TestRequestIDSerialization(t *testing.T) { - req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.NewKeyPair()) + req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.NewKeyPair()) requestID := req.ID() bcs.TestCodec(t, requestID) rwutil.StringTest(t, requestID, isc.RequestIDFromString) - req = isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.TestKeyPair) + req = isc.NewOffLedgerRequest(isctest.TestChainID, isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.TestKeyPair) requestID = req.ID() bcs.TestCodecAndHash(t, requestID, "16ff060b83fc") } func TestRequestRefSerialization(t *testing.T) { - req := isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.NewKeyPair()) + req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.NewKeyPair()) reqRef0 := &isc.RequestRef{ ID: req.ID(), Hash: hashing.PseudoRandomHash(nil), @@ -158,7 +160,7 @@ func TestRequestRefSerialization(t *testing.T) { bcs.TestCodec(t, reqRef0) - req = isc.NewOffLedgerRequest(isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.TestKeyPair) + req = isc.NewOffLedgerRequest(isctest.TestChainID, isc.NewMessage(3, 14, isc.NewCallArguments()), 1337, 200).Sign(cryptolib.TestKeyPair) bcs.TestCodecAndHash(t, &isc.RequestRef{ ID: req.ID(), Hash: hashing.TestHash, diff --git a/packages/isc/sandbox_interface.go b/packages/isc/sandbox_interface.go index 9695a16225..5166f94f50 100644 --- a/packages/isc/sandbox_interface.go +++ b/packages/isc/sandbox_interface.go @@ -32,6 +32,8 @@ type SandboxBase interface { Balance // Params returns the parameters of the current call Params() CallArguments + // ChainID returns the chain ID + ChainID() ChainID // ChainAdmin returns the chain admin AgentID (not necessarily the same as "anchor owner") ChainAdmin() AgentID // ChainInfo returns information and configuration parameters of the chain diff --git a/packages/solo/evm.go b/packages/solo/evm.go index ca69946ac9..84f4ec8d9d 100644 --- a/packages/solo/evm.go +++ b/packages/solo/evm.go @@ -147,7 +147,7 @@ func (ch *Chain) EVM() *jsonrpc.EVMChain { } func (ch *Chain) PostEthereumTransaction(tx *types.Transaction) (isc.CallArguments, error) { - req, err := isc.NewEVMOffLedgerTxRequest(tx) + req, err := isc.NewEVMOffLedgerTxRequest(ch.ChainID, tx) if err != nil { return nil, err } diff --git a/packages/solo/req.go b/packages/solo/req.go index 75e300becb..7de11392a4 100644 --- a/packages/solo/req.go +++ b/packages/solo/req.go @@ -207,7 +207,7 @@ func (r *CallParams) NewRequestOffLedger(ch *Chain, keyPair *cryptolib.KeyPair) if r.nonce == 0 { r.nonce = ch.Nonce(isc.NewAddressAgentID(keyPair.Address())) } - ret := isc.NewOffLedgerRequest(r.msg, r.nonce, r.gasBudget). + ret := isc.NewOffLedgerRequest(ch.ChainID, r.msg, r.nonce, r.gasBudget). WithAllowance(r.allowance) return ret.Sign(keyPair) } @@ -485,6 +485,7 @@ func (ch *Chain) callViewByHnameAtState(chainState state.State, msg isc.Message) defer ch.runVMMutex.Unlock() vmctx, err := viewcontext.New( + ch.ChainID, chainState, ch.proc, ch.log, @@ -506,6 +507,7 @@ func (ch *Chain) GetMerkleProofRaw(key []byte) *trie.MerkleProof { latestState, err := ch.LatestState() require.NoError(ch.Env.T, err) vmctx, err := viewcontext.New( + ch.ChainID, latestState, ch.proc, ch.log, @@ -527,6 +529,7 @@ func (ch *Chain) GetBlockProof(blockIndex uint32) (*blocklog.BlockInfo, *trie.Me latestState, err := ch.LatestState() require.NoError(ch.Env.T, err) vmctx, err := viewcontext.New( + ch.ChainID, latestState, ch.proc, ch.log, @@ -567,6 +570,7 @@ func (ch *Chain) GetContractStateCommitment(hn isc.Hname) ([]byte, error) { latestState, err := ch.LatestState() require.NoError(ch.Env.T, err) vmctx, err := viewcontext.New( + ch.ChainID, latestState, ch.proc, ch.log, diff --git a/packages/testutil/dummyrequest.go b/packages/testutil/dummyrequest.go index 126137b04d..4771686c95 100644 --- a/packages/testutil/dummyrequest.go +++ b/packages/testutil/dummyrequest.go @@ -16,19 +16,19 @@ import ( func DummyOffledgerRequest() isc.OffLedgerRequest { contract := isc.Hn("somecontract") entrypoint := isc.Hn("someentrypoint") - req := isc.NewOffLedgerRequest(isc.NewMessage(contract, entrypoint), 0, gas.LimitsDefault.MaxGasPerRequest) + req := isc.NewOffLedgerRequest(isc.EmptyChainID(), isc.NewMessage(contract, entrypoint), 0, gas.LimitsDefault.MaxGasPerRequest) keys, _ := testkey.GenKeyAddr() return req.Sign(keys) } -func DummyOffledgerRequestForAccount(nonce uint64, kp *cryptolib.KeyPair) isc.OffLedgerRequest { +func DummyOffledgerRequestForAccount(chainID isc.ChainID, nonce uint64, kp *cryptolib.KeyPair) isc.OffLedgerRequest { contract := isc.Hn("somecontract") entrypoint := isc.Hn("someentrypoint") - req := isc.NewOffLedgerRequest(isc.NewMessage(contract, entrypoint), nonce, gas.LimitsDefault.MaxGasPerRequest) + req := isc.NewOffLedgerRequest(chainID, isc.NewMessage(contract, entrypoint), nonce, gas.LimitsDefault.MaxGasPerRequest) return req.Sign(kp) } -func DummyEVMRequest(gasPrice *big.Int) isc.OffLedgerRequest { +func DummyEVMRequest(chainID isc.ChainID, gasPrice *big.Int) isc.OffLedgerRequest { key, err := crypto.GenerateKey() if err != nil { panic(err) @@ -44,7 +44,7 @@ func DummyEVMRequest(gasPrice *big.Int) isc.OffLedgerRequest { Data: []byte{}, }) - req, err := isc.NewEVMOffLedgerTxRequest(tx) + req, err := isc.NewEVMOffLedgerTxRequest(chainID, tx) if err != nil { panic(err) } diff --git a/packages/vm/core/blocklog/blocklog_test.go b/packages/vm/core/blocklog/blocklog_test.go index a443e3bef7..ce4e6bdf46 100644 --- a/packages/vm/core/blocklog/blocklog_test.go +++ b/packages/vm/core/blocklog/blocklog_test.go @@ -13,6 +13,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/hashing" "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/kv" "github.com/iotaledger/wasp/v2/packages/kv/collections" "github.com/iotaledger/wasp/v2/packages/kv/dict" @@ -22,7 +23,7 @@ import ( func TestSerdeRequestReceipt(t *testing.T) { nonce := uint64(time.Now().UnixNano()) - req := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("0"), isc.Hn("0")), nonce, gas.LimitsDefault.MaxGasPerRequest) + req := isc.NewOffLedgerRequest(isctest.RandomChainID(), isc.NewMessage(isc.Hn("0"), isc.Hn("0")), nonce, gas.LimitsDefault.MaxGasPerRequest) signedReq := req.Sign(cryptolib.NewKeyPair()) rec := &RequestReceipt{ Request: signedReq, diff --git a/packages/vm/core/blocklog/interface_test.go b/packages/vm/core/blocklog/interface_test.go index 51d318292e..434e96c1f0 100644 --- a/packages/vm/core/blocklog/interface_test.go +++ b/packages/vm/core/blocklog/interface_test.go @@ -13,7 +13,7 @@ import ( func TestOutputRequestReceiptCodec(t *testing.T) { v := &blocklog.RequestReceipt{ - Request: isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("0"), + Request: isc.NewOffLedgerRequest(isc.EmptyChainID(), isc.NewMessage(isc.Hn("0"), isc.Hn("0")), 123, 456).Sign(cryptolib.NewKeyPair()), Error: &isc.UnresolvedVMError{ ErrorCode: blocklog.ErrBlockNotFound.Code(), @@ -45,7 +45,7 @@ func TestOutputRequestReceiptsCodec(t *testing.T) { BlockIndex: 123, Receipts: []*blocklog.RequestReceipt{ { - Request: isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("0"), + Request: isc.NewOffLedgerRequest(isc.EmptyChainID(), isc.NewMessage(isc.Hn("0"), isc.Hn("0")), 123, 456).Sign(cryptolib.NewKeyPair()), Error: &isc.UnresolvedVMError{ ErrorCode: blocklog.ErrBlockNotFound.Code(), @@ -66,7 +66,7 @@ func TestOutputRequestReceiptsCodec(t *testing.T) { }, }, { - Request: isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("0"), + Request: isc.NewOffLedgerRequest(isc.EmptyChainID(), isc.NewMessage(isc.Hn("0"), isc.Hn("0")), 123, 456).Sign(cryptolib.NewKeyPair()), Error: &isc.UnresolvedVMError{ ErrorCode: blocklog.ErrBlockNotFound.Code(), diff --git a/packages/vm/core/blocklog/receipt_test.go b/packages/vm/core/blocklog/receipt_test.go index 1edc7dfa66..9cce000e3a 100644 --- a/packages/vm/core/blocklog/receipt_test.go +++ b/packages/vm/core/blocklog/receipt_test.go @@ -14,6 +14,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/evm/evmutil" "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/util" "github.com/iotaledger/wasp/v2/packages/vm/core/blocklog" "github.com/iotaledger/wasp/v2/packages/vm/gas" @@ -22,6 +23,7 @@ import ( func TestReceiptCodec(t *testing.T) { bcs.TestCodec(t, blocklog.RequestReceipt{ Request: isc.NewOffLedgerRequest( + isc.EmptyChainID(), isc.NewMessage(isc.Hn("0"), isc.Hn("0")), 123, gas.LimitsDefault.MaxGasPerRequest, @@ -34,6 +36,7 @@ func TestReceiptCodec(t *testing.T) { bcs.TestCodecAndHash(t, blocklog.RequestReceipt{ Request: isc.NewOffLedgerRequest( + isctest.TestChainID, isc.NewMessage(isc.Hn("account"), isc.Hn("deposit")), 123, gas.LimitsDefault.MaxGasPerRequest, @@ -59,6 +62,7 @@ func TestReceiptCodecEVM(t *testing.T) { rec := blocklog.RequestReceipt{ Request: lo.Must(isc.NewEVMOffLedgerTxRequest( + isctest.RandomChainID(), tx, )), } diff --git a/packages/vm/core/evm/evmimpl/iscmagic_sandbox_view.go b/packages/vm/core/evm/evmimpl/iscmagic_sandbox_view.go index dfe2f48572..3bd323f25e 100644 --- a/packages/vm/core/evm/evmimpl/iscmagic_sandbox_view.go +++ b/packages/vm/core/evm/evmimpl/iscmagic_sandbox_view.go @@ -11,6 +11,11 @@ import ( "github.com/iotaledger/wasp/v2/packages/vm/core/evm/iscmagic" ) +// handler for ISCSandbox::getChainID +func (h *magicContractHandler) GetChainID() isc.ChainID { + return h.ctx.ChainID() +} + // handler for ISCSandbox::getChainAdmin func (h *magicContractHandler) GetChainAdmin() iscmagic.ISCAgentID { return iscmagic.WrapISCAgentID(h.ctx.ChainAdmin()) diff --git a/packages/vm/core/evm/evmtest/bench_test.go b/packages/vm/core/evm/evmtest/bench_test.go index 7a2eda6ac9..ec579893f6 100644 --- a/packages/vm/core/evm/evmtest/bench_test.go +++ b/packages/vm/core/evm/evmtest/bench_test.go @@ -34,7 +34,7 @@ func initBenchmark(b *testing.B) (*solo.Chain, []isc.Request) { gasLimit: gasLimit, }}, "store", uint32(i)) require.NoError(b, err) - reqs[i], err = isc.NewEVMOffLedgerTxRequest(tx) + reqs[i], err = isc.NewEVMOffLedgerTxRequest(env.Chain.ChainID, tx) require.NoError(b, err) } diff --git a/packages/vm/core/evm/evmtest/evm_test.go b/packages/vm/core/evm/evmtest/evm_test.go index 647fb87dec..76d09fc311 100644 --- a/packages/vm/core/evm/evmtest/evm_test.go +++ b/packages/vm/core/evm/evmtest/evm_test.go @@ -2050,7 +2050,7 @@ func testEVMWithdrawWithFailedTx(t *testing.T, withdrawFirst bool) { iscmagic.WrapISCAssets(isc.NewEmptyAssets()), ) require.NoError(t, err) - withdrawRequest, err := isc.NewEVMOffLedgerTxRequest(tx) + withdrawRequest, err := isc.NewEVMOffLedgerTxRequest(env.Chain.ChainID, tx) require.NoError(t, err) failingRequest := solo.NewCallParams(accounts.FuncWithdraw.Message()). diff --git a/packages/vm/core/testcore/base_test.go b/packages/vm/core/testcore/base_test.go index 23723b0f8e..ef12292553 100644 --- a/packages/vm/core/testcore/base_test.go +++ b/packages/vm/core/testcore/base_test.go @@ -463,6 +463,7 @@ func TestInvalidSignatureRequestsAreNotProcessed(t *testing.T) { // produce a badly signed off-ledger request req := isc.NewOffLedgerRequest( + ch.ChainID, isc.NewMessage(isc.Hn("contract"), isc.Hn("entrypoint"), nil), 0, math.MaxUint64, @@ -511,8 +512,8 @@ func TestBatchWithSkippedRequestsReceipts(t *testing.T) { require.NoError(t, err) // create a request with an invalid nonce that must be skipped - skipReq := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("contract"), isc.Hn("entrypoint"), nil), 0, math.MaxUint64).WithNonce(9999).Sign(user) - validReq := isc.NewOffLedgerRequest(isc.NewMessage(isc.Hn("contract"), isc.Hn("entrypoint"), nil), 0, math.MaxUint64).WithNonce(0).Sign(user) + skipReq := isc.NewOffLedgerRequest(ch.ChainID, isc.NewMessage(isc.Hn("contract"), isc.Hn("entrypoint"), nil), 0, math.MaxUint64).WithNonce(9999).Sign(user) + validReq := isc.NewOffLedgerRequest(ch.ChainID, isc.NewMessage(isc.Hn("contract"), isc.Hn("entrypoint"), nil), 0, math.MaxUint64).WithNonce(0).Sign(user) ch.RunRequestsSync([]isc.Request{skipReq, validReq}) diff --git a/packages/vm/execution/interface.go b/packages/vm/execution/interface.go index 9975607b63..5cf2095ae8 100644 --- a/packages/vm/execution/interface.go +++ b/packages/vm/execution/interface.go @@ -39,6 +39,7 @@ type WaspCallContext interface { GetBaseTokensBalance(agentID isc.AgentID) (coin.Value, *big.Int) GetCoinBalance(agentID isc.AgentID, coinType coin.Type) coin.Value Call(msg isc.Message, allowance *isc.Assets) isc.CallArguments + ChainID() isc.ChainID ChainAdmin() isc.AgentID ChainInfo() *isc.ChainInfo CurrentContractHname() isc.Hname diff --git a/packages/vm/sandbox/sandboxbase.go b/packages/vm/sandbox/sandboxbase.go index ad72c08f15..4c50fd8590 100644 --- a/packages/vm/sandbox/sandboxbase.go +++ b/packages/vm/sandbox/sandboxbase.go @@ -77,6 +77,11 @@ func (s *SandboxBase) GetCoinInfo(coinType coin.Type) (*parameters.IotaCoinInfo, return s.Ctx.GetCoinInfo(coinType) } +func (s *SandboxBase) ChainID() isc.ChainID { + s.Ctx.GasBurn(gas.BurnCodeGetContext) + return s.Ctx.ChainID() +} + func (s *SandboxBase) ChainAdmin() isc.AgentID { s.Ctx.GasBurn(gas.BurnCodeGetContext) return s.Ctx.ChainAdmin() diff --git a/packages/vm/viewcontext/viewcontext.go b/packages/vm/viewcontext/viewcontext.go index d24234cf55..21b7e24662 100644 --- a/packages/vm/viewcontext/viewcontext.go +++ b/packages/vm/viewcontext/viewcontext.go @@ -31,6 +31,7 @@ import ( type ViewContext struct { processors *processors.Config stateReader state.State + chainID isc.ChainID log log.Logger chainInfo *isc.ChainInfo gasBurnLog *gas.BurnLog @@ -44,7 +45,7 @@ type ViewContext struct { var _ execution.WaspCallContext = &ViewContext{} func New( - + chainID isc.ChainID, stateReader state.State, processors *processors.Config, log log.Logger, @@ -53,6 +54,7 @@ func New( return &ViewContext{ processors: processors, stateReader: stateReader, + chainID: chainID, log: log, gasBurnLoggingEnabled: gasBurnLoggingEnabled, schemaVersion: stateReader.SchemaVersion(), @@ -150,6 +152,10 @@ func (ctx *ViewContext) ChainInfo() *isc.ChainInfo { return ctx.chainInfo } +func (ctx *ViewContext) ChainID() isc.ChainID { + return ctx.chainID +} + func (ctx *ViewContext) ChainAdmin() isc.AgentID { return ctx.chainInfo.ChainAdmin } diff --git a/packages/webapi/common/vm.go b/packages/webapi/common/vm.go index 813e6dab02..c70b91134e 100644 --- a/packages/webapi/common/vm.go +++ b/packages/webapi/common/vm.go @@ -73,7 +73,7 @@ func CallView(ch chainpkg.Chain, msg isc.Message, blockIndexOrHash string) (isc. } } - return chainutil.CallView(chainState, ch.Processors(), ch.Log(), msg) + return chainutil.CallView(ch.ID(), chainState, ch.Processors(), ch.Log(), msg) } func EstimateGas(ch chainpkg.Chain, req isc.Request) (*isc.Receipt, error) { diff --git a/packages/webapi/services/waspevmbackend.go b/packages/webapi/services/waspevmbackend.go index 458fd40271..75573a97ac 100644 --- a/packages/webapi/services/waspevmbackend.go +++ b/packages/webapi/services/waspevmbackend.go @@ -65,7 +65,7 @@ func (b *WaspEVMBackend) EVMSendTransaction(tx *types.Transaction) error { return core.ErrIntrinsicGas } - req, err := isc.NewEVMOffLedgerTxRequest(tx) + req, err := isc.NewEVMOffLedgerTxRequest(b.chain.ID(), tx) if err != nil { return err } @@ -123,7 +123,12 @@ func (b *WaspEVMBackend) EVMTrace( } func (b *WaspEVMBackend) ISCCallView(chainState state.State, msg isc.Message) (isc.CallArguments, error) { + latestAnchor, err := b.chain.LatestAnchor(chain.ActiveOrCommittedState) + if err != nil { + return nil, err + } return chainutil.CallView( + latestAnchor.ChainID(), chainState, b.chain.Processors(), b.chain.Log(), diff --git a/packages/webapi/test/offledger_test.go b/packages/webapi/test/offledger_test.go index 38afa82359..d2d3df0e3d 100644 --- a/packages/webapi/test/offledger_test.go +++ b/packages/webapi/test/offledger_test.go @@ -25,7 +25,7 @@ func TestOffLedger(t *testing.T) { userWallet, userAddress := env.NewKeyPairWithFunds(env.NewSeedFromIndex(0)) chain.DepositBaseTokensToL2(env.L1BaseTokens(userAddress)/10, userWallet) - req := isc.NewOffLedgerRequest(accounts.FuncDeposit.Message(), 0, math.MaxUint64) + req := isc.NewOffLedgerRequest(chain.ID(), accounts.FuncDeposit.Message(), 0, math.MaxUint64) altReq := isc.NewImpersonatedOffLedgerRequest(req.(*isc.OffLedgerRequestDataEssence)). WithSenderAddress(userWallet.Address()) diff --git a/tools/cluster/tests/estimategas_test.go b/tools/cluster/tests/estimategas_test.go index 67ac7e4cc4..26cfad587d 100644 --- a/tools/cluster/tests/estimategas_test.go +++ b/tools/cluster/tests/estimategas_test.go @@ -66,6 +66,7 @@ func (e *ChainEnv) testEstimateGasOffLedger(t *testing.T) { e.DepositFunds(10*isc.Million, keyPair) estimationReq := isc.NewOffLedgerRequest( + e.Chain.ChainID, accounts.FuncTransferAllowanceTo.Message(isc.NewAddressAgentID(cryptolib.NewEmptyAddress())), 0, 1*isc.Million, diff --git a/tools/cluster/tests/missing_requests_test.go b/tools/cluster/tests/missing_requests_test.go index 7a89aa0bc3..84d8626d61 100644 --- a/tools/cluster/tests/missing_requests_test.go +++ b/tools/cluster/tests/missing_requests_test.go @@ -26,6 +26,7 @@ func TestMissingRequests(t *testing.T) { chain, err := clu.DeployChain(clu.Config.AllNodes(), cmt, threshold, addr) require.NoError(t, err) + chainID := chain.ChainID chEnv := newChainEnv(t, clu, chain) @@ -37,7 +38,7 @@ func TestMissingRequests(t *testing.T) { // TODO: Validate offleder logic // send off-ledger request to all nodes except #3 - req := isc.NewOffLedgerRequest(inccounter.FuncIncCounter.Message(nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(userWallet) + req := isc.NewOffLedgerRequest(chainID, inccounter.FuncIncCounter.Message(nil), 0, gas.LimitsDefault.MaxGasPerRequest).Sign(userWallet) _, err = clu.WaspClient(0).RequestsAPI.OffLedger(context.Background()).OffLedgerRequest(apiclient.OffLedgerRequest{ Request: cryptolib.EncodeHex(req.Bytes()), @@ -46,7 +47,7 @@ func TestMissingRequests(t *testing.T) { //------ // send a dummy request to node #3, so that it proposes a batch and the consensus hang is broken - req2 := isc.NewOffLedgerRequest(isc.NewMessageFromNames("foo", "bar"), 1, gas.LimitsDefault.MaxGasPerRequest).Sign(userWallet) + req2 := isc.NewOffLedgerRequest(chainID, isc.NewMessageFromNames("foo", "bar"), 1, gas.LimitsDefault.MaxGasPerRequest).Sign(userWallet) _, err = clu.WaspClient(0).RequestsAPI.OffLedger(context.Background()).OffLedgerRequest(apiclient.OffLedgerRequest{ Request: cryptolib.EncodeHex(req2.Bytes()), From 5a2d0304eb27b7825bfd48d587ca1a24c254670f Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Mon, 18 Aug 2025 08:26:50 -0700 Subject: [PATCH 10/27] Formatted with gufumpt --- clients/iota-go/hw_ledger/ledger-go/ledger_test.go | 1 - clients/iota-go/hw_ledger/ledger_test.go | 1 - clients/iota-go/iotaclient/client.go | 12 +++++++----- clients/iota-go/iotaconn/websocket.go | 1 - clients/iota-go/iotago/iotatest/test_values.go | 6 ++++-- packages/chain/statemanager/gpa/state_manager_gpa.go | 1 - packages/chains/accessmanager/access_manager.go | 3 +-- .../accessmanager/dist/input_chain_disabled.go | 3 +-- packages/transaction/change_gov_controller.go | 1 - tools/cluster/tests/wasp-cli.go | 2 +- tools/cluster/tests/wasp-cli_rotation_test.go | 4 ++-- 11 files changed, 16 insertions(+), 19 deletions(-) diff --git a/clients/iota-go/hw_ledger/ledger-go/ledger_test.go b/clients/iota-go/hw_ledger/ledger-go/ledger_test.go index 82060df119..8fe25a3aad 100644 --- a/clients/iota-go/hw_ledger/ledger-go/ledger_test.go +++ b/clients/iota-go/hw_ledger/ledger-go/ledger_test.go @@ -111,7 +111,6 @@ func Test_BasicExchange(t *testing.T) { for i := 0; i < 10; i++ { response, err := ledger.Exchange(message) - if err != nil { fmt.Printf("iteration %d\n", i) t.Fatalf("Error: %s", err.Error()) diff --git a/clients/iota-go/hw_ledger/ledger_test.go b/clients/iota-go/hw_ledger/ledger_test.go index 225c8e3cae..0015c1e73c 100644 --- a/clients/iota-go/hw_ledger/ledger_test.go +++ b/clients/iota-go/hw_ledger/ledger_test.go @@ -78,7 +78,6 @@ func TestDeployChain(t *testing.T) { require.NoError(t, err) fmt.Println(result) - } func TestSign(t *testing.T) { diff --git a/clients/iota-go/iotaclient/client.go b/clients/iota-go/iotaclient/client.go index 026de0aa77..f319136137 100644 --- a/clients/iota-go/iotaclient/client.go +++ b/clients/iota-go/iotaclient/client.go @@ -22,11 +22,13 @@ type WaitParams struct { DelayBetweenAttempts time.Duration } -var WaitForEffectsDisabled *WaitParams = nil -var WaitForEffectsEnabled *WaitParams = &WaitParams{ - Attempts: 5, - DelayBetweenAttempts: 2 * time.Second, -} +var ( + WaitForEffectsDisabled *WaitParams = nil + WaitForEffectsEnabled *WaitParams = &WaitParams{ + Attempts: 5, + DelayBetweenAttempts: 2 * time.Second, + } +) type transport interface { Call(ctx context.Context, v any, method iotaconn.JsonRPCMethod, args ...any) error diff --git a/clients/iota-go/iotaconn/websocket.go b/clients/iota-go/iotaconn/websocket.go index f54d8f92cd..c61d58611c 100644 --- a/clients/iota-go/iotaconn/websocket.go +++ b/clients/iota-go/iotaconn/websocket.go @@ -34,7 +34,6 @@ func NewWebsocketClient( url string, log log.Logger, ) (*WebsocketClient, error) { - c := &WebsocketClient{ url: url, writeQueue: make(chan *jsonrpcMessage), diff --git a/clients/iota-go/iotago/iotatest/test_values.go b/clients/iota-go/iotago/iotatest/test_values.go index 71c9317d08..e9a9d04163 100644 --- a/clients/iota-go/iotago/iotatest/test_values.go +++ b/clients/iota-go/iotago/iotatest/test_values.go @@ -35,8 +35,10 @@ func testTransactionData(packageAddr, senderAddr *iotago.Address) *iotago.Transa return &tx } -var TestAddress = iotago.AddressFromArray([iotago.AddressLen]byte(testval.TestBytes(iotago.AddressLen))) -var TestDigest = iotago.MustNewDigest(testval.TestHex(iotago.DigestSize)) +var ( + TestAddress = iotago.AddressFromArray([iotago.AddressLen]byte(testval.TestBytes(iotago.AddressLen))) + TestDigest = iotago.MustNewDigest(testval.TestHex(iotago.DigestSize)) +) var TestObjectRef = &iotago.ObjectRef{ ObjectID: TestAddress, diff --git a/packages/chain/statemanager/gpa/state_manager_gpa.go b/packages/chain/statemanager/gpa/state_manager_gpa.go index 71abbd0873..88c774562f 100644 --- a/packages/chain/statemanager/gpa/state_manager_gpa.go +++ b/packages/chain/statemanager/gpa/state_manager_gpa.go @@ -49,7 +49,6 @@ type stateManagerGPA struct { var _ gpa.GPA = &stateManagerGPA{} func New( - loadedSnapshotStateIndex uint32, nr utils.NodeRandomiser, wal gpautils.BlockWAL, diff --git a/packages/chains/accessmanager/access_manager.go b/packages/chains/accessmanager/access_manager.go index 46c2a9dd59..91c0970e69 100644 --- a/packages/chains/accessmanager/access_manager.go +++ b/packages/chains/accessmanager/access_manager.go @@ -46,8 +46,7 @@ type reqChainAccessNodes struct { accessNodes []*cryptolib.PublicKey } -type reqChainDismissed struct { -} +type reqChainDismissed struct{} var _ AccessMgr = &accessMgrImpl{} diff --git a/packages/chains/accessmanager/dist/input_chain_disabled.go b/packages/chains/accessmanager/dist/input_chain_disabled.go index d0eff0a0eb..4f202b1742 100644 --- a/packages/chains/accessmanager/dist/input_chain_disabled.go +++ b/packages/chains/accessmanager/dist/input_chain_disabled.go @@ -4,8 +4,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/gpa" ) -type inputChainDisabled struct { -} +type inputChainDisabled struct{} func NewInputChainDisabled() gpa.Input { return &inputChainDisabled{} diff --git a/packages/transaction/change_gov_controller.go b/packages/transaction/change_gov_controller.go index 125ea332e1..3b52d66c80 100644 --- a/packages/transaction/change_gov_controller.go +++ b/packages/transaction/change_gov_controller.go @@ -7,7 +7,6 @@ import ( ) func NewChangeGovControllerTx( - newGovController iotago.Address, // utxos iotago.OutputSet, wallet cryptolib.Signer, diff --git a/tools/cluster/tests/wasp-cli.go b/tools/cluster/tests/wasp-cli.go index bf1f84c2d1..461c94591e 100644 --- a/tools/cluster/tests/wasp-cli.go +++ b/tools/cluster/tests/wasp-cli.go @@ -42,7 +42,7 @@ func newWaspCLITest(t *testing.T, opt ...waspClusterOpts) *WaspCLITest { }) // creating a config in a temp dir per test. If not provided, wasp-cli will reuse the config from HOME dir, which could mess up other tests or local configuration. - err = os.WriteFile(path.Join(dir, "wasp-cli.json"), []byte("{}"), 0644) + err = os.WriteFile(path.Join(dir, "wasp-cli.json"), []byte("{}"), 0o644) require.NoError(t, err) w := &WaspCLITest{ diff --git a/tools/cluster/tests/wasp-cli_rotation_test.go b/tools/cluster/tests/wasp-cli_rotation_test.go index 0535c651cd..98297bd989 100644 --- a/tools/cluster/tests/wasp-cli_rotation_test.go +++ b/tools/cluster/tests/wasp-cli_rotation_test.go @@ -69,8 +69,8 @@ func testWaspCLIExternalRotation(t *testing.T, addAccessNode func(*WaspCLITest, "--node=0", ) // TODO: FIX this test - //matches := regexp.MustCompile(`.*ChainID:\s*([a-zA-Z0-9_]*)\s+.*`).FindStringSubmatch(strings.Join(out, " ")) - //chainID := matches[1] + // matches := regexp.MustCompile(`.*ChainID:\s*([a-zA-Z0-9_]*)\s+.*`).FindStringSubmatch(strings.Join(out, " ")) + // chainID := matches[1] w.ActivateChainOnAllNodes("chain1", 0) // start a new wasp cluster From ff73e988df6c883d17c4f7e8e896660ad11b0963 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Tue, 19 Aug 2025 06:13:11 -0700 Subject: [PATCH 11/27] Renamed chains into chainrunner; Returned chain ID into off ledger requests --- components/app/app.go | 4 +- .../{chains => chainrunner}/component.go | 54 ++++++++-------- components/{chains => chainrunner}/params.go | 10 +-- components/nodeconn/component.go | 4 +- components/webapi/component.go | 6 +- .../accessmanager/access_manager.go | 2 +- .../accessmanager/access_manager_test.go | 2 +- .../accessmanager/dist/.gitignore | 0 .../accessmanager/dist/Makefile | 0 .../dist/WaspChainAccessNodes.png | Bin .../dist/WaspChainAccessNodes.xopp | Bin .../dist/WaspChainAccessNodesV4.tla | 0 .../dist/WaspChainAccessNodesV4_N2C1L3R0.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L3R1.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L4R0.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L4R1.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L5R0.cfg | 0 .../accessmanager/dist/access_manager_dist.go | 58 +++++++++--------- .../dist/access_manager_dist_test.go | 2 +- .../dist/access_manager_rapid_test.go | 2 +- .../accessmanager/dist/input_access_nodes.go | 0 .../dist/input_chain_disabled.go | 0 .../accessmanager/dist/input_trusted_nodes.go | 0 .../accessmanager/dist/msg.go | 0 .../accessmanager/dist/msg_access.go | 6 +- .../accessmanager/dist/msg_access_test.go | 0 .../chain_listener.go} | 2 +- .../chains.go => chainrunner/runner.go} | 6 +- packages/chainutil/evmcall.go | 4 +- packages/chainutil/evmestimategas.go | 8 +-- packages/isc/chaininfo.go | 1 + packages/isc/request.go | 1 + packages/isc/request_evmcall.go | 8 ++- packages/isc/request_offledger.go | 5 ++ .../governance/governanceimpl/chaininfo.go | 2 +- packages/vm/core/governance/internal.go | 3 +- packages/vm/viewcontext/viewcontext.go | 4 +- packages/vm/vmimpl/runreq.go | 2 +- packages/vm/vmimpl/vmrun_test.go | 2 +- packages/webapi/api.go | 4 +- packages/webapi/services/chain.go | 5 +- packages/webapi/services/committee.go | 6 +- packages/webapi/services/evm.go | 6 +- packages/webapi/services/metrics.go | 6 +- packages/webapi/services/node.go | 6 +- packages/webapi/services/peering.go | 6 +- packages/webapi/services/registry.go | 6 +- tools/wasp-cli/chain/access-nodes.go | 2 +- tools/wasp-cli/cli/config/config.go | 4 +- 49 files changed, 131 insertions(+), 118 deletions(-) rename components/{chains => chainrunner}/component.go (72%) rename components/{chains => chainrunner}/params.go (97%) rename packages/{chains => chainrunner}/accessmanager/access_manager.go (99%) rename packages/{chains => chainrunner}/accessmanager/access_manager_test.go (98%) rename packages/{chains => chainrunner}/accessmanager/dist/.gitignore (100%) rename packages/{chains => chainrunner}/accessmanager/dist/Makefile (100%) rename packages/{chains => chainrunner}/accessmanager/dist/WaspChainAccessNodes.png (100%) rename packages/{chains => chainrunner}/accessmanager/dist/WaspChainAccessNodes.xopp (100%) rename packages/{chains => chainrunner}/accessmanager/dist/WaspChainAccessNodesV4.tla (100%) rename packages/{chains => chainrunner}/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg (100%) rename packages/{chains => chainrunner}/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg (100%) rename packages/{chains => chainrunner}/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg (100%) rename packages/{chains => chainrunner}/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg (100%) rename packages/{chains => chainrunner}/accessmanager/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg (100%) rename packages/{chains => chainrunner}/accessmanager/dist/access_manager_dist.go (90%) rename packages/{chains => chainrunner}/accessmanager/dist/access_manager_dist_test.go (95%) rename packages/{chains => chainrunner}/accessmanager/dist/access_manager_rapid_test.go (98%) rename packages/{chains => chainrunner}/accessmanager/dist/input_access_nodes.go (100%) rename packages/{chains => chainrunner}/accessmanager/dist/input_chain_disabled.go (100%) rename packages/{chains => chainrunner}/accessmanager/dist/input_trusted_nodes.go (100%) rename packages/{chains => chainrunner}/accessmanager/dist/msg.go (100%) rename packages/{chains => chainrunner}/accessmanager/dist/msg_access.go (89%) rename packages/{chains => chainrunner}/accessmanager/dist/msg_access_test.go (100%) rename packages/{chains/chains_listener.go => chainrunner/chain_listener.go} (98%) rename packages/{chains/chains.go => chainrunner/runner.go} (98%) diff --git a/components/app/app.go b/components/app/app.go index ccdb4f00f0..a1f903ebd3 100644 --- a/components/app/app.go +++ b/components/app/app.go @@ -8,7 +8,7 @@ import ( "github.com/iotaledger/hive.go/app/components/profiling" "github.com/iotaledger/hive.go/app/components/shutdown" "github.com/iotaledger/wasp/v2/components/cache" - "github.com/iotaledger/wasp/v2/components/chains" + "github.com/iotaledger/wasp/v2/components/chainrunner" "github.com/iotaledger/wasp/v2/components/database" "github.com/iotaledger/wasp/v2/components/dkg" "github.com/iotaledger/wasp/v2/components/logger" @@ -48,7 +48,7 @@ func App() *app.App { peering.Component, dkg.Component, processors.Component, - chains.Component, + chainrunner.Component, publisher.Component, webapi.Component, profiling.Component, diff --git a/components/chains/component.go b/components/chainrunner/component.go similarity index 72% rename from components/chains/component.go rename to components/chainrunner/component.go index 15a5059133..3003a1b747 100644 --- a/components/chains/component.go +++ b/components/chainrunner/component.go @@ -1,4 +1,4 @@ -package chains +package chainrunner import ( "context" @@ -13,7 +13,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/chain" "github.com/iotaledger/wasp/v2/packages/chain/cmtlog" "github.com/iotaledger/wasp/v2/packages/chain/mempool" - "github.com/iotaledger/wasp/v2/packages/chains" + chainrunner "github.com/iotaledger/wasp/v2/packages/chainrunner" "github.com/iotaledger/wasp/v2/packages/daemon" "github.com/iotaledger/wasp/v2/packages/database" "github.com/iotaledger/wasp/v2/packages/metrics" @@ -44,7 +44,7 @@ type dependencies struct { dig.In ShutdownHandler *hiveshutdown.ShutdownHandler - Chains *chains.ChainRunner + Chains *chainrunner.ChainRunner } func initConfigParams(c *dig.Container) error { @@ -55,16 +55,16 @@ func initConfigParams(c *dig.Container) error { if err := c.Provide(func() cfgResult { return cfgResult{ - APICacheTTL: ParamsChains.APICacheTTL, + APICacheTTL: ParamsChainRunner.APICacheTTL, } }); err != nil { Component.LogPanic(err.Error()) } - chain.RedeliveryPeriod = ParamsChains.RedeliveryPeriod - chain.PrintStatusPeriod = ParamsChains.PrintStatusPeriod - chain.ConsensusInstsInAdvance = ParamsChains.ConsensusInstsInAdvance - chain.AwaitReceiptCleanupEvery = ParamsChains.AwaitReceiptCleanupEvery + chain.RedeliveryPeriod = ParamsChainRunner.RedeliveryPeriod + chain.PrintStatusPeriod = ParamsChainRunner.PrintStatusPeriod + chain.ConsensusInstsInAdvance = ParamsChainRunner.ConsensusInstsInAdvance + chain.AwaitReceiptCleanupEvery = ParamsChainRunner.AwaitReceiptCleanupEvery return nil } @@ -86,24 +86,24 @@ func provide(c *dig.Container) error { ChainMetricsProvider *metrics.ChainMetricsProvider } - type chainsResult struct { + type chainRunnerResult struct { dig.Out - Chains *chains.ChainRunner + Runner *chainrunner.ChainRunner } - if err := c.Provide(func(deps chainsDeps) chainsResult { - return chainsResult{ - Chains: chains.New( + if err := c.Provide(func(deps chainsDeps) chainRunnerResult { + return chainRunnerResult{ + Runner: chainrunner.New( Component.Logger, deps.NodeConnection, deps.ProcessorsConfig, ParamsValidator.Address, - ParamsChains.DeriveAliasOutputByQuorum, - ParamsChains.PipeliningLimit, - ParamsChains.PostponeRecoveryMilestones, - ParamsChains.ConsensusDelay, - ParamsChains.RecoveryTimeout, + ParamsChainRunner.DeriveAliasOutputByQuorum, + ParamsChainRunner.PipeliningLimit, + ParamsChainRunner.PostponeRecoveryMilestones, + ParamsChainRunner.ConsensusDelay, + ParamsChainRunner.RecoveryTimeout, deps.NetworkProvider, deps.TrustedNetworkManager, deps.ChainStateDatabaseManager.ChainStateKVStore, @@ -131,16 +131,16 @@ func provide(c *dig.Container) error { deps.ConsensusStateRegistry, deps.ChainListener, mempool.Settings{ - TTL: ParamsChains.MempoolTTL, - OnLedgerRefreshMinInterval: ParamsChains.MempoolOnLedgerRefreshMinInterval, - MaxOffledgerInPool: ParamsChains.MempoolMaxOffledgerInPool, - MaxOnledgerInPool: ParamsChains.MempoolMaxOnledgerInPool, - MaxTimedInPool: ParamsChains.MempoolMaxTimedInPool, - MaxOnledgerToPropose: ParamsChains.MempoolMaxOnledgerToPropose, - MaxOffledgerToPropose: ParamsChains.MempoolMaxOffledgerToPropose, - MaxOffledgerPerAccount: ParamsChains.MempoolMaxOffledgerPerAccount, + TTL: ParamsChainRunner.MempoolTTL, + OnLedgerRefreshMinInterval: ParamsChainRunner.MempoolOnLedgerRefreshMinInterval, + MaxOffledgerInPool: ParamsChainRunner.MempoolMaxOffledgerInPool, + MaxOnledgerInPool: ParamsChainRunner.MempoolMaxOnledgerInPool, + MaxTimedInPool: ParamsChainRunner.MempoolMaxTimedInPool, + MaxOnledgerToPropose: ParamsChainRunner.MempoolMaxOnledgerToPropose, + MaxOffledgerToPropose: ParamsChainRunner.MempoolMaxOffledgerToPropose, + MaxOffledgerPerAccount: ParamsChainRunner.MempoolMaxOffledgerPerAccount, }, - ParamsChains.BroadcastInterval, + ParamsChainRunner.BroadcastInterval, shutdown.NewCoordinator("chains", Component.NewChildLogger("Shutdown")), deps.ChainMetricsProvider, ), diff --git a/components/chains/params.go b/components/chainrunner/params.go similarity index 97% rename from components/chains/params.go rename to components/chainrunner/params.go index 3ef6a7ba5e..d738cf66ce 100644 --- a/components/chains/params.go +++ b/components/chainrunner/params.go @@ -1,7 +1,7 @@ -// Package chains provides functionality for managing IOTA Smart Contract chains, +// Package chains provides functionality for managing IOTA Smart Contract chain runner, // including chain configuration parameters, write-ahead logging, validator settings, // state management, and snapshot capabilities. -package chains +package chainrunner import ( "time" @@ -9,7 +9,7 @@ import ( "github.com/iotaledger/hive.go/app" ) -type ParametersChains struct { +type ParametersChainRunner struct { BroadcastUpToNPeers int `default:"2" usage:"number of peers an offledger request is broadcasted to"` BroadcastInterval time.Duration `default:"0s" usage:"time between re-broadcast of offledger requests; 0 value means that re-broadcasting is disabled"` APICacheTTL time.Duration `default:"300s" usage:"time to keep processed offledger requests in api cache"` @@ -65,7 +65,7 @@ type ParametersSnapshotManager struct { } var ( - ParamsChains = &ParametersChains{} + ParamsChainRunner = &ParametersChainRunner{} ParamsWAL = &ParametersWAL{} ParamsValidator = &ParametersValidator{} ParamsStateManager = &ParametersStateManager{} @@ -74,7 +74,7 @@ var ( var params = &app.ComponentParams{ Params: map[string]any{ - "chains": ParamsChains, + "chains": ParamsChainRunner, // TODO: fix the name "wal": ParamsWAL, "validator": ParamsValidator, "stateManager": ParamsStateManager, diff --git a/components/nodeconn/component.go b/components/nodeconn/component.go index ab073cd4ed..ad1525b5e8 100644 --- a/components/nodeconn/component.go +++ b/components/nodeconn/component.go @@ -13,7 +13,7 @@ import ( "github.com/iotaledger/hive.go/app/shutdown" "github.com/iotaledger/wasp/v2/clients/iota-go/iotago" - "github.com/iotaledger/wasp/v2/components/chains" + "github.com/iotaledger/wasp/v2/components/chainrunner" "github.com/iotaledger/wasp/v2/packages/chain" "github.com/iotaledger/wasp/v2/packages/daemon" "github.com/iotaledger/wasp/v2/packages/nodeconn" @@ -54,7 +54,7 @@ func provide(c *dig.Container) error { nodeConnection, err := nodeconn.New( Component.Daemon().ContextStopped(), *address, - chains.ParamsChains.MempoolMaxOnledgerInPool, + chainrunner.ParamsChainRunner.MempoolMaxOnledgerInPool, ParamsL1.WebsocketURL, ParamsL1.HTTPURL, Component.NewChildLogger("nc"), diff --git a/components/webapi/component.go b/components/webapi/component.go index 36ff3a4891..7b212a78d9 100644 --- a/components/webapi/component.go +++ b/components/webapi/component.go @@ -23,7 +23,7 @@ import ( "github.com/iotaledger/hive.go/web/websockethub" "github.com/iotaledger/wasp/v2/packages/authentication" "github.com/iotaledger/wasp/v2/packages/chain" - "github.com/iotaledger/wasp/v2/packages/chains" + "github.com/iotaledger/wasp/v2/packages/chainrunner" "github.com/iotaledger/wasp/v2/packages/daemon" "github.com/iotaledger/wasp/v2/packages/dkg" "github.com/iotaledger/wasp/v2/packages/evm/jsonrpc" @@ -216,7 +216,7 @@ func provide(c *dig.Container) error { AppConfig *configuration.Configuration `name:"appConfig"` ShutdownHandler *shutdown.ShutdownHandler APICacheTTL time.Duration `name:"apiCacheTTL"` - Chains *chains.ChainRunner + Chains *chainrunner.ChainRunner ChainMetricsProvider *metrics.ChainMetricsProvider ChainRecordRegistryProvider registry.ChainRecordRegistryProvider DKShareRegistryProvider registry.DKShareRegistryProvider @@ -277,7 +277,7 @@ func provide(c *dig.Container) error { deps.ChainRecordRegistryProvider, deps.DKShareRegistryProvider, deps.NodeIdentityProvider, - func() *chains.ChainRunner { + func() *chainrunner.ChainRunner { return deps.Chains }, func() *dkg.Node { diff --git a/packages/chains/accessmanager/access_manager.go b/packages/chainrunner/accessmanager/access_manager.go similarity index 99% rename from packages/chains/accessmanager/access_manager.go rename to packages/chainrunner/accessmanager/access_manager.go index 91c0970e69..0e2ed1aff0 100644 --- a/packages/chains/accessmanager/access_manager.go +++ b/packages/chainrunner/accessmanager/access_manager.go @@ -11,7 +11,7 @@ import ( "github.com/samber/lo" "github.com/iotaledger/hive.go/log" - "github.com/iotaledger/wasp/v2/packages/chains/accessmanager/dist" + "github.com/iotaledger/wasp/v2/packages/chainrunner/accessmanager/dist" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" "github.com/iotaledger/wasp/v2/packages/peering" diff --git a/packages/chains/accessmanager/access_manager_test.go b/packages/chainrunner/accessmanager/access_manager_test.go similarity index 98% rename from packages/chains/accessmanager/access_manager_test.go rename to packages/chainrunner/accessmanager/access_manager_test.go index f26a814976..81ef9b2e25 100644 --- a/packages/chains/accessmanager/access_manager_test.go +++ b/packages/chainrunner/accessmanager/access_manager_test.go @@ -14,7 +14,7 @@ import ( "github.com/stretchr/testify/require" hivelog "github.com/iotaledger/hive.go/log" - "github.com/iotaledger/wasp/v2/packages/chains/accessmanager" + "github.com/iotaledger/wasp/v2/packages/chainrunner/accessmanager" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/testutil" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" diff --git a/packages/chains/accessmanager/dist/.gitignore b/packages/chainrunner/accessmanager/dist/.gitignore similarity index 100% rename from packages/chains/accessmanager/dist/.gitignore rename to packages/chainrunner/accessmanager/dist/.gitignore diff --git a/packages/chains/accessmanager/dist/Makefile b/packages/chainrunner/accessmanager/dist/Makefile similarity index 100% rename from packages/chains/accessmanager/dist/Makefile rename to packages/chainrunner/accessmanager/dist/Makefile diff --git a/packages/chains/accessmanager/dist/WaspChainAccessNodes.png b/packages/chainrunner/accessmanager/dist/WaspChainAccessNodes.png similarity index 100% rename from packages/chains/accessmanager/dist/WaspChainAccessNodes.png rename to packages/chainrunner/accessmanager/dist/WaspChainAccessNodes.png diff --git a/packages/chains/accessmanager/dist/WaspChainAccessNodes.xopp b/packages/chainrunner/accessmanager/dist/WaspChainAccessNodes.xopp similarity index 100% rename from packages/chains/accessmanager/dist/WaspChainAccessNodes.xopp rename to packages/chainrunner/accessmanager/dist/WaspChainAccessNodes.xopp diff --git a/packages/chains/accessmanager/dist/WaspChainAccessNodesV4.tla b/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4.tla similarity index 100% rename from packages/chains/accessmanager/dist/WaspChainAccessNodesV4.tla rename to packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4.tla diff --git a/packages/chains/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg b/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg similarity index 100% rename from packages/chains/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg rename to packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg diff --git a/packages/chains/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg b/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg similarity index 100% rename from packages/chains/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg rename to packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg diff --git a/packages/chains/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg b/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg similarity index 100% rename from packages/chains/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg rename to packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg diff --git a/packages/chains/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg b/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg similarity index 100% rename from packages/chains/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg rename to packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg diff --git a/packages/chains/accessmanager/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg b/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg similarity index 100% rename from packages/chains/accessmanager/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg rename to packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg diff --git a/packages/chains/accessmanager/dist/access_manager_dist.go b/packages/chainrunner/accessmanager/dist/access_manager_dist.go similarity index 90% rename from packages/chains/accessmanager/dist/access_manager_dist.go rename to packages/chainrunner/accessmanager/dist/access_manager_dist.go index f63bdf1fdf..45a8c49fe8 100644 --- a/packages/chains/accessmanager/dist/access_manager_dist.go +++ b/packages/chainrunner/accessmanager/dist/access_manager_dist.go @@ -154,11 +154,11 @@ func (amd *accessMgrDist) handleInputTrustedNodes(input *inputTrustedNodes) gpa. if amd.nodes.Has(trustedNodeID) { continue } - hasAccess := false + isAccessNode := false if amd.chain != nil && amd.chain.IsAccessGrantedFor(trustedNodeID) { - hasAccess = true + isAccessNode = true } - trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, hasAccess) + trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, isAccessNode) msgs.AddAll(trustedNodeMsgs) amd.nodes.Set(trustedNodeID, trustedNode) } @@ -266,29 +266,29 @@ func (amc *accessMgrChain) Disabled() { //////////////////////////////////////////////////////////////////////////////// type accessMgrNode struct { - nodeID gpa.NodeID - pubKey *cryptolib.PublicKey - ourLC int - peerLC int - hasAccess bool - isServer bool + nodeID gpa.NodeID + pubKey *cryptolib.PublicKey + ourLC int + peerLC int + isAccessNode bool + isServer bool } func newAccessMgrNode( nodeID gpa.NodeID, pubKey *cryptolib.PublicKey, - hasAccess bool, + isAccessNode bool, ) (*accessMgrNode, gpa.OutMessages) { amn := &accessMgrNode{ - nodeID: nodeID, - pubKey: pubKey, - ourLC: 1, - peerLC: 0, - hasAccess: hasAccess, - isServer: false, + nodeID: nodeID, + pubKey: pubKey, + ourLC: 1, + peerLC: 0, + isAccessNode: isAccessNode, + isServer: false, } msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.isAccessNode, amn.isServer)) return amn, msgs } @@ -300,51 +300,51 @@ func (amn *accessMgrNode) SetChainAccess(access bool) gpa.OutMessages { } func (amn *accessMgrNode) grantAccess() gpa.OutMessages { - if amn.hasAccess { + if amn.isAccessNode { return nil } - amn.hasAccess = true + amn.isAccessNode = true amn.ourLC++ msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.isAccessNode, amn.isServer)) return msgs } func (amn *accessMgrNode) revokeAccess() gpa.OutMessages { - if !amn.hasAccess { + if !amn.isAccessNode { return nil } - amn.hasAccess = false + amn.isAccessNode = false amn.ourLC++ msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.isAccessNode, amn.isServer)) return msgs } func (amn *accessMgrNode) handleMsgAccess(msg *msgAccess) gpa.OutMessages { // This has to be checked before updating the state. // > IF /\ m.access = isServer(n, m.src) \* Peer's info hasn't changed, so we don't need to ack it. - // > /\ m.server = H(hasAccess(n, m.src)) \* Our info echoed, so that was an ack. + // > /\ m.server = H(isAccessNode(n, m.src)) \* Our info echoed, so that was an ack. // > /\ m.src_lc >= lClock[n][m.src] \* Peer's clock is not outdated, we don't need to push it forward. // > /\ m.dst_lc <= lClock[n][n] \* And the echoed clock don't exceed our clock, so we don't need to push it. // > THEN sendAndAck(m, {}) // > ELSE sendAndAck(m, accessMsgs(n)) sendDone := true && - msg.hasAccess == amn.isServer && - msg.isServer == amn.hasAccess && + msg.isAccessNode == amn.isServer && + msg.isServer == amn.isAccessNode && msg.senderLClock >= amn.peerLC && msg.receiverLClock <= amn.ourLC // // Update isServer and peerLC. if msg.senderLClock > amn.peerLC { - amn.isServer = msg.hasAccess + amn.isServer = msg.isAccessNode amn.peerLC = msg.senderLClock } // // Update ourLC. if amn.ourLC <= msg.receiverLClock { amn.ourLC = msg.receiverLClock - if !amn.hasAccess == msg.isServer { + if !amn.isAccessNode == msg.isServer { amn.ourLC++ } } @@ -352,7 +352,7 @@ func (amn *accessMgrNode) handleMsgAccess(msg *msgAccess) gpa.OutMessages { // Send message back, if needed. if !sendDone { return gpa.NoMessages().Add( - newMsgAccess(msg.Sender(), amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer), + newMsgAccess(msg.Sender(), amn.ourLC, amn.peerLC, amn.isAccessNode, amn.isServer), ) } return nil diff --git a/packages/chains/accessmanager/dist/access_manager_dist_test.go b/packages/chainrunner/accessmanager/dist/access_manager_dist_test.go similarity index 95% rename from packages/chains/accessmanager/dist/access_manager_dist_test.go rename to packages/chainrunner/accessmanager/dist/access_manager_dist_test.go index ce1371528f..5bae4106c3 100644 --- a/packages/chains/accessmanager/dist/access_manager_dist_test.go +++ b/packages/chainrunner/accessmanager/dist/access_manager_dist_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/require" - "github.com/iotaledger/wasp/v2/packages/chains/accessmanager/dist" + "github.com/iotaledger/wasp/v2/packages/chainrunner/accessmanager/dist" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" diff --git a/packages/chains/accessmanager/dist/access_manager_rapid_test.go b/packages/chainrunner/accessmanager/dist/access_manager_rapid_test.go similarity index 98% rename from packages/chains/accessmanager/dist/access_manager_rapid_test.go rename to packages/chainrunner/accessmanager/dist/access_manager_rapid_test.go index 283ec422f2..98c558fdde 100644 --- a/packages/chains/accessmanager/dist/access_manager_rapid_test.go +++ b/packages/chainrunner/accessmanager/dist/access_manager_rapid_test.go @@ -12,7 +12,7 @@ import ( "pgregory.net/rapid" "github.com/iotaledger/hive.go/log" - "github.com/iotaledger/wasp/v2/packages/chains/accessmanager/dist" + "github.com/iotaledger/wasp/v2/packages/chainrunner/accessmanager/dist" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" diff --git a/packages/chains/accessmanager/dist/input_access_nodes.go b/packages/chainrunner/accessmanager/dist/input_access_nodes.go similarity index 100% rename from packages/chains/accessmanager/dist/input_access_nodes.go rename to packages/chainrunner/accessmanager/dist/input_access_nodes.go diff --git a/packages/chains/accessmanager/dist/input_chain_disabled.go b/packages/chainrunner/accessmanager/dist/input_chain_disabled.go similarity index 100% rename from packages/chains/accessmanager/dist/input_chain_disabled.go rename to packages/chainrunner/accessmanager/dist/input_chain_disabled.go diff --git a/packages/chains/accessmanager/dist/input_trusted_nodes.go b/packages/chainrunner/accessmanager/dist/input_trusted_nodes.go similarity index 100% rename from packages/chains/accessmanager/dist/input_trusted_nodes.go rename to packages/chainrunner/accessmanager/dist/input_trusted_nodes.go diff --git a/packages/chains/accessmanager/dist/msg.go b/packages/chainrunner/accessmanager/dist/msg.go similarity index 100% rename from packages/chains/accessmanager/dist/msg.go rename to packages/chainrunner/accessmanager/dist/msg.go diff --git a/packages/chains/accessmanager/dist/msg_access.go b/packages/chainrunner/accessmanager/dist/msg_access.go similarity index 89% rename from packages/chains/accessmanager/dist/msg_access.go rename to packages/chainrunner/accessmanager/dist/msg_access.go index 011683c688..5ad72590d1 100644 --- a/packages/chains/accessmanager/dist/msg_access.go +++ b/packages/chainrunner/accessmanager/dist/msg_access.go @@ -12,7 +12,7 @@ type msgAccess struct { gpa.BasicMessage senderLClock int `bcs:"export,type=u32"` receiverLClock int `bcs:"export,type=u32"` - hasAccess bool `bcs:"export"` + isAccessNode bool `bcs:"export"` isServer bool `bcs:"export"` } @@ -21,14 +21,14 @@ var _ gpa.Message = new(msgAccess) func newMsgAccess( recipient gpa.NodeID, senderLClock, receiverLClock int, - hasAccess bool, + isAccessNode bool, isServer bool, ) gpa.Message { return &msgAccess{ BasicMessage: gpa.NewBasicMessage(recipient), senderLClock: senderLClock, receiverLClock: receiverLClock, - hasAccess: hasAccess, + isAccessNode: isAccessNode, isServer: isServer, } } diff --git a/packages/chains/accessmanager/dist/msg_access_test.go b/packages/chainrunner/accessmanager/dist/msg_access_test.go similarity index 100% rename from packages/chains/accessmanager/dist/msg_access_test.go rename to packages/chainrunner/accessmanager/dist/msg_access_test.go diff --git a/packages/chains/chains_listener.go b/packages/chainrunner/chain_listener.go similarity index 98% rename from packages/chains/chains_listener.go rename to packages/chainrunner/chain_listener.go index a2ad64723e..8e9b3fb886 100644 --- a/packages/chains/chains_listener.go +++ b/packages/chainrunner/chain_listener.go @@ -1,7 +1,7 @@ // Copyright 2020 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -package chains +package chainrunner import ( "github.com/iotaledger/wasp/v2/packages/chain" diff --git a/packages/chains/chains.go b/packages/chainrunner/runner.go similarity index 98% rename from packages/chains/chains.go rename to packages/chainrunner/runner.go index 9ffe687725..4b6e2f4c80 100644 --- a/packages/chains/chains.go +++ b/packages/chainrunner/runner.go @@ -1,8 +1,8 @@ // Copyright 2020 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -// Package chains provides functionality for managing multiple blockchain instances. -package chains +// Package chainrunner provides functionality for managing blockchain instance +package chainrunner import ( "context" @@ -20,7 +20,7 @@ import ( "github.com/iotaledger/wasp/v2/packages/chain/statemanager/gpa" "github.com/iotaledger/wasp/v2/packages/chain/statemanager/gpa/utils" "github.com/iotaledger/wasp/v2/packages/chain/statemanager/snapshots" - "github.com/iotaledger/wasp/v2/packages/chains/accessmanager" + "github.com/iotaledger/wasp/v2/packages/chainrunner/accessmanager" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/database" "github.com/iotaledger/wasp/v2/packages/isc" diff --git a/packages/chainutil/evmcall.go b/packages/chainutil/evmcall.go index 44548f2d69..2594807e34 100644 --- a/packages/chainutil/evmcall.go +++ b/packages/chainutil/evmcall.go @@ -29,7 +29,7 @@ func EVMCall( if err != nil { return nil, err } - info := getChainInfo(latestState) + info := getChainInfo(anchor.ChainID(), latestState) // 0 means view call gasLimit := gas.EVMCallGasLimit(info.GasLimits, &info.GasFeePolicy.EVMGasRatio) @@ -41,7 +41,7 @@ func EVMCall( call.GasPrice = info.GasFeePolicy.DefaultGasPriceFullDecimals(parameters.BaseTokenDecimals) } - iscReq := isc.NewEVMOffLedgerCallRequest(call) + iscReq := isc.NewEVMOffLedgerCallRequest(info.ChainID, call) res, err := runISCRequest( anchor, l1Params, diff --git a/packages/chainutil/evmestimategas.go b/packages/chainutil/evmestimategas.go index e78f3e76bd..bdfc9f5819 100644 --- a/packages/chainutil/evmestimategas.go +++ b/packages/chainutil/evmestimategas.go @@ -50,7 +50,7 @@ func EVMEstimateGas( if err != nil { return 0, err } - info := getChainInfo(latestState) + info := getChainInfo(anchor.ChainID(), latestState) maximumPossibleGas := gas.EVMCallGasLimit(info.GasLimits, &info.GasFeePolicy.EVMGasRatio) if call.Gas >= params.TxGas { @@ -69,7 +69,7 @@ func EVMEstimateGas( blockTime := time.Now() executable := func(gas uint64) (failed bool, result *vm.RequestResult, err error) { call.Gas = gas - iscReq := isc.NewEVMOffLedgerCallRequest(call) + iscReq := isc.NewEVMOffLedgerCallRequest(info.ChainID, call) res, err := runISCRequest( anchor, l1Params, @@ -152,8 +152,8 @@ func EVMEstimateGas( return hi, nil } -func getChainInfo(chainState state.State) *isc.ChainInfo { - return governance.NewStateReaderFromChainState(chainState).GetChainInfo() +func getChainInfo(chainID isc.ChainID, chainState state.State) *isc.ChainInfo { + return governance.NewStateReaderFromChainState(chainState).GetChainInfo(chainID) } func resolveError(chainState state.State, receiptError *isc.UnresolvedVMError) (isOutOfGas bool, resolved *isc.VMError, err error) { diff --git a/packages/isc/chaininfo.go b/packages/isc/chaininfo.go index 696cbe6797..6321de1292 100644 --- a/packages/isc/chaininfo.go +++ b/packages/isc/chaininfo.go @@ -10,6 +10,7 @@ import ( // ChainInfo is an API structure containing the main parameters of the chain type ChainInfo struct { + ChainID ChainID ChainAdmin AgentID GasFeePolicy *gas.FeePolicy GasLimits *gas.Limits diff --git a/packages/isc/request.go b/packages/isc/request.go index ad9dee21bd..c0565fbca9 100644 --- a/packages/isc/request.go +++ b/packages/isc/request.go @@ -71,6 +71,7 @@ type ImpersonatedOffLedgerRequest interface { type OffLedgerRequest interface { Request + ChainID() ChainID Nonce() uint64 VerifySignature() error GasPrice() *big.Int diff --git a/packages/isc/request_evmcall.go b/packages/isc/request_evmcall.go index 69e6d32646..74b461ba97 100644 --- a/packages/isc/request_evmcall.go +++ b/packages/isc/request_evmcall.go @@ -17,13 +17,15 @@ import ( // evmOffLedgerCallRequest is used to wrap an EVM call (for the eth_call or eth_estimateGas jsonrpc methods) type evmOffLedgerCallRequest struct { + chainID ChainID `bcs:"export"` callMsg ethereum.CallMsg `bcs:"export"` } var _ OffLedgerRequest = &evmOffLedgerCallRequest{} -func NewEVMOffLedgerCallRequest(callMsg ethereum.CallMsg) OffLedgerRequest { +func NewEVMOffLedgerCallRequest(chainID ChainID, callMsg ethereum.CallMsg) OffLedgerRequest { return &evmOffLedgerCallRequest{ + chainID: chainID, callMsg: callMsg, } } @@ -49,6 +51,10 @@ func (req *evmOffLedgerCallRequest) Message() Message { ) } +func (req *evmOffLedgerCallRequest) ChainID() ChainID { + return req.chainID +} + func (req *evmOffLedgerCallRequest) GasBudget() (gas uint64, isEVM bool) { return req.callMsg.Gas, true } diff --git a/packages/isc/request_offledger.go b/packages/isc/request_offledger.go index fe107144d3..c6525ec83c 100644 --- a/packages/isc/request_offledger.go +++ b/packages/isc/request_offledger.go @@ -48,6 +48,7 @@ func NewImpersonatedOffLedgerRequest(request *OffLedgerRequestDataEssence) Imper OffLedgerRequestData: OffLedgerRequestData{ OffLedgerRequestDataEssence: OffLedgerRequestDataEssence{ allowance: request.allowance, + chainID: request.chainID, msg: request.msg, gasBudget: request.gasBudget, nonce: request.nonce, @@ -105,6 +106,10 @@ func (req *OffLedgerRequestData) Message() Message { return req.msg } +func (req *OffLedgerRequestData) ChainID() ChainID { + return req.chainID +} + func (req *OffLedgerRequestDataEssence) Bytes() []byte { return bcs.MustMarshal(req) } diff --git a/packages/vm/core/governance/governanceimpl/chaininfo.go b/packages/vm/core/governance/governanceimpl/chaininfo.go index aea5430c2f..228ba5a827 100644 --- a/packages/vm/core/governance/governanceimpl/chaininfo.go +++ b/packages/vm/core/governance/governanceimpl/chaininfo.go @@ -11,5 +11,5 @@ import ( // getChainInfo view returns general info about the chain: chain ID, chain admin ID, limits and default fees func getChainInfo(ctx isc.SandboxView) *isc.ChainInfo { state := governance.NewStateReaderFromSandbox(ctx) - return state.GetChainInfo() + return state.GetChainInfo(ctx.ChainID()) } diff --git a/packages/vm/core/governance/internal.go b/packages/vm/core/governance/internal.go index 32bab3af5f..cf73bbab72 100644 --- a/packages/vm/core/governance/internal.go +++ b/packages/vm/core/governance/internal.go @@ -29,9 +29,10 @@ func (s *StateWriter) SetInitialState(chainAdmin isc.AgentID, blockKeepAmount in } // GetChainInfo returns global variables of the chain -func (s *StateReader) GetChainInfo() *isc.ChainInfo { +func (s *StateReader) GetChainInfo(chainID isc.ChainID) *isc.ChainInfo { ret := &isc.ChainInfo{ Metadata: &isc.PublicChainMetadata{}, + ChainID: chainID, } ret.ChainAdmin = s.GetChainAdmin() ret.GasFeePolicy = s.GetGasFeePolicy() diff --git a/packages/vm/viewcontext/viewcontext.go b/packages/vm/viewcontext/viewcontext.go index 21b7e24662..0e23f74ec0 100644 --- a/packages/vm/viewcontext/viewcontext.go +++ b/packages/vm/viewcontext/viewcontext.go @@ -153,7 +153,7 @@ func (ctx *ViewContext) ChainInfo() *isc.ChainInfo { } func (ctx *ViewContext) ChainID() isc.ChainID { - return ctx.chainID + return ctx.chainInfo.ChainID } func (ctx *ViewContext) ChainAdmin() isc.AgentID { @@ -225,7 +225,7 @@ func (ctx *ViewContext) callView(msg isc.Message) (ret isc.CallArguments) { func (ctx *ViewContext) initAndCallView(msg isc.Message) (ret isc.CallArguments) { ctx.chainInfo = governance.NewStateReader(ctx.contractStateReaderWithGasBurn(governance.Contract.Hname())). - GetChainInfo() + GetChainInfo(ctx.chainID) ctx.gasBudget = ctx.chainInfo.GasLimits.MaxGasExternalViewCall if ctx.gasBurnLoggingEnabled { ctx.gasBurnLog = gas.NewGasBurnLog() diff --git a/packages/vm/vmimpl/runreq.go b/packages/vm/vmimpl/runreq.go index efcfab0601..db450e1c1f 100644 --- a/packages/vm/vmimpl/runreq.go +++ b/packages/vm/vmimpl/runreq.go @@ -496,5 +496,5 @@ func (reqctx *requestContext) GetContractRecord(contractHname isc.Hname) (ret *r } func (vmctx *vmContext) loadChainConfig() { - vmctx.chainInfo = governance.NewStateReaderFromChainState(vmctx.stateDraft).GetChainInfo() + vmctx.chainInfo = governance.NewStateReaderFromChainState(vmctx.stateDraft).GetChainInfo(vmctx.ChainID()) } diff --git a/packages/vm/vmimpl/vmrun_test.go b/packages/vm/vmimpl/vmrun_test.go index 00b3daead6..a5e9ff40de 100644 --- a/packages/vm/vmimpl/vmrun_test.go +++ b/packages/vm/vmimpl/vmrun_test.go @@ -129,7 +129,7 @@ func transitionAnchor( state := lo.Must(store.StateByTrieRoot(block.TrieRoot())) chainInfo := governance.NewStateReaderFromChainState(state). - GetChainInfo() + GetChainInfo(anchor.ChainID()) newStateMetadata := transaction.NewStateMetadata( stateMetadata.SchemaVersion, diff --git a/packages/webapi/api.go b/packages/webapi/api.go index 2c77981145..1429f6a5d7 100644 --- a/packages/webapi/api.go +++ b/packages/webapi/api.go @@ -12,7 +12,7 @@ import ( "github.com/iotaledger/hive.go/app/shutdown" "github.com/iotaledger/hive.go/log" "github.com/iotaledger/wasp/v2/packages/authentication" - "github.com/iotaledger/wasp/v2/packages/chains" + "github.com/iotaledger/wasp/v2/packages/chainrunner" "github.com/iotaledger/wasp/v2/packages/dkg" "github.com/iotaledger/wasp/v2/packages/evm/jsonrpc" "github.com/iotaledger/wasp/v2/packages/metrics" @@ -86,7 +86,7 @@ func Init( chainRecordRegistryProvider registry.ChainRecordRegistryProvider, dkShareRegistryProvider registry.DKShareRegistryProvider, nodeIdentityProvider registry.NodeIdentityProvider, - chainsProvider chains.Provider, + chainsProvider chainrunner.Provider, dkgNodeProvider dkg.NodeProvider, shutdownHandler *shutdown.ShutdownHandler, chainMetricsProvider *metrics.ChainMetricsProvider, diff --git a/packages/webapi/services/chain.go b/packages/webapi/services/chain.go index 9127b25b92..d9efee1765 100644 --- a/packages/webapi/services/chain.go +++ b/packages/webapi/services/chain.go @@ -12,7 +12,6 @@ import ( "github.com/iotaledger/wasp/v2/clients/iota-go/iotago" chainpkg "github.com/iotaledger/wasp/v2/packages/chain" - "github.com/iotaledger/wasp/v2/packages/chains" "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/kv" "github.com/iotaledger/wasp/v2/packages/metrics" @@ -28,14 +27,14 @@ import ( type ChainService struct { log log.Logger - chainsProvider chains.Provider + chainsProvider chainrunner.Provider chainMetricsProvider *metrics.ChainMetricsProvider chainRecordRegistryProvider registry.ChainRecordRegistryProvider } func NewChainService( logger log.Logger, - chainsProvider chains.Provider, + chainsProvider chainrunner.Provider, chainMetricsProvider *metrics.ChainMetricsProvider, chainRecordRegistryProvider registry.ChainRecordRegistryProvider, ) interfaces.ChainService { diff --git a/packages/webapi/services/committee.go b/packages/webapi/services/committee.go index c38a7f5509..6fdd53314a 100644 --- a/packages/webapi/services/committee.go +++ b/packages/webapi/services/committee.go @@ -3,7 +3,7 @@ package services import ( "errors" - "github.com/iotaledger/wasp/v2/packages/chains" + "github.com/iotaledger/wasp/v2/packages/chainrunner" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/peering" "github.com/iotaledger/wasp/v2/packages/registry" @@ -16,12 +16,12 @@ import ( var ErrNotInCommittee = errors.New("this node is not in the committee for the chain") type CommitteeService struct { - chainsProvider chains.Provider + chainsProvider chainrunner.Provider networkProvider peering.NetworkProvider dkShareRegistryProvider registry.DKShareRegistryProvider } -func NewCommitteeService(chainsProvider chains.Provider, networkProvider peering.NetworkProvider, dkShareRegistryProvider registry.DKShareRegistryProvider) interfaces.CommitteeService { +func NewCommitteeService(chainsProvider chainrunner.Provider, networkProvider peering.NetworkProvider, dkShareRegistryProvider registry.DKShareRegistryProvider) interfaces.CommitteeService { return &CommitteeService{ chainsProvider: chainsProvider, networkProvider: networkProvider, diff --git a/packages/webapi/services/evm.go b/packages/webapi/services/evm.go index d683623414..ec06a02aa6 100644 --- a/packages/webapi/services/evm.go +++ b/packages/webapi/services/evm.go @@ -10,7 +10,7 @@ import ( hivedb "github.com/iotaledger/hive.go/db" "github.com/iotaledger/hive.go/log" - "github.com/iotaledger/wasp/v2/packages/chains" + "github.com/iotaledger/wasp/v2/packages/chainrunner" "github.com/iotaledger/wasp/v2/packages/evm/jsonrpc" "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/metrics" @@ -31,7 +31,7 @@ type EVMService struct { websocketContextMutex sync.Mutex websocketContext *websocketContext - chainsProvider chains.Provider + chainsProvider chainrunner.Provider chainService interfaces.ChainService networkProvider peering.NetworkProvider publisher *publisher.Publisher @@ -42,7 +42,7 @@ type EVMService struct { } func NewEVMService( - chainsProvider chains.Provider, + chainsProvider chainrunner.Provider, chainService interfaces.ChainService, networkProvider peering.NetworkProvider, pub *publisher.Publisher, diff --git a/packages/webapi/services/metrics.go b/packages/webapi/services/metrics.go index ffe91277e0..28eeaa0d45 100644 --- a/packages/webapi/services/metrics.go +++ b/packages/webapi/services/metrics.go @@ -1,7 +1,7 @@ package services import ( - "github.com/iotaledger/wasp/v2/packages/chains" + "github.com/iotaledger/wasp/v2/packages/chainrunner" "github.com/iotaledger/wasp/v2/packages/metrics" "github.com/iotaledger/wasp/v2/packages/webapi/dto" "github.com/iotaledger/wasp/v2/packages/webapi/interfaces" @@ -9,11 +9,11 @@ import ( ) type MetricsService struct { - chainProvider chains.Provider + chainProvider chainrunner.Provider chainMetricsProvider *metrics.ChainMetricsProvider } -func NewMetricsService(chainProvider chains.Provider, chainMetricsProvider *metrics.ChainMetricsProvider) interfaces.MetricsService { +func NewMetricsService(chainProvider chainrunner.Provider, chainMetricsProvider *metrics.ChainMetricsProvider) interfaces.MetricsService { return &MetricsService{ chainProvider: chainProvider, chainMetricsProvider: chainMetricsProvider, diff --git a/packages/webapi/services/node.go b/packages/webapi/services/node.go index becc73faad..2ea1568f3d 100644 --- a/packages/webapi/services/node.go +++ b/packages/webapi/services/node.go @@ -5,7 +5,7 @@ import ( "errors" "github.com/iotaledger/hive.go/app/shutdown" - "github.com/iotaledger/wasp/v2/packages/chains" + "github.com/iotaledger/wasp/v2/packages/chainrunner" "github.com/iotaledger/wasp/v2/packages/parameters" "github.com/iotaledger/wasp/v2/packages/peering" "github.com/iotaledger/wasp/v2/packages/registry" @@ -16,7 +16,7 @@ import ( type NodeService struct { chainRecordRegistryProvider registry.ChainRecordRegistryProvider nodeIdentityProvider registry.NodeIdentityProvider - chainsProvider chains.Provider + chainsProvider chainrunner.Provider shutdownHandler *shutdown.ShutdownHandler trustedNetworkManager peering.TrustedNetworkManager l1ParamsFetcher parameters.L1ParamsFetcher @@ -25,7 +25,7 @@ type NodeService struct { func NewNodeService( chainRecordRegistryProvider registry.ChainRecordRegistryProvider, nodeIdentityProvider registry.NodeIdentityProvider, - chainsProvider chains.Provider, + chainsProvider chainrunner.Provider, shutdownHandler *shutdown.ShutdownHandler, trustedNetworkManager peering.TrustedNetworkManager, l1ParamsFetcher parameters.L1ParamsFetcher, diff --git a/packages/webapi/services/peering.go b/packages/webapi/services/peering.go index d7df90cc0f..c7ac596517 100644 --- a/packages/webapi/services/peering.go +++ b/packages/webapi/services/peering.go @@ -3,7 +3,7 @@ package services import ( "github.com/samber/lo" - "github.com/iotaledger/wasp/v2/packages/chains" + "github.com/iotaledger/wasp/v2/packages/chainrunner" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/peering" "github.com/iotaledger/wasp/v2/packages/webapi/dto" @@ -11,12 +11,12 @@ import ( ) type PeeringService struct { - chainsProvider chains.Provider + chainsProvider chainrunner.Provider networkProvider peering.NetworkProvider trustedNetworkManager peering.TrustedNetworkManager } -func NewPeeringService(chainsProvider chains.Provider, networkProvider peering.NetworkProvider, trustedNetworkManager peering.TrustedNetworkManager) *PeeringService { +func NewPeeringService(chainsProvider chainrunner.Provider, networkProvider peering.NetworkProvider, trustedNetworkManager peering.TrustedNetworkManager) *PeeringService { return &PeeringService{ chainsProvider: chainsProvider, networkProvider: networkProvider, diff --git a/packages/webapi/services/registry.go b/packages/webapi/services/registry.go index 89e66eab57..575f971791 100644 --- a/packages/webapi/services/registry.go +++ b/packages/webapi/services/registry.go @@ -1,17 +1,17 @@ package services import ( - "github.com/iotaledger/wasp/v2/packages/chains" + "github.com/iotaledger/wasp/v2/packages/chainrunner" "github.com/iotaledger/wasp/v2/packages/registry" "github.com/iotaledger/wasp/v2/packages/webapi/interfaces" ) type RegistryService struct { - chainsProvider chains.Provider + chainsProvider chainrunner.Provider chainRecordRegistryProvider registry.ChainRecordRegistryProvider } -func NewRegistryService(chainsProvider chains.Provider, chainRecordRegistryProvider registry.ChainRecordRegistryProvider) interfaces.RegistryService { +func NewRegistryService(chainsProvider chainrunner.Provider, chainRecordRegistryProvider registry.ChainRecordRegistryProvider) interfaces.RegistryService { return &RegistryService{ chainsProvider: chainsProvider, chainRecordRegistryProvider: chainRecordRegistryProvider, diff --git a/tools/wasp-cli/chain/access-nodes.go b/tools/wasp-cli/chain/access-nodes.go index bf75042566..3d43aed992 100644 --- a/tools/wasp-cli/chain/access-nodes.go +++ b/tools/wasp-cli/chain/access-nodes.go @@ -1,7 +1,7 @@ // Copyright 2022 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -// Package chain provides functionality for interacting with and managing IOTA smart contract chains. +// Package chain provides functionality for interacting with and managing IOTA smart contract chainrunner. package chain import ( diff --git a/tools/wasp-cli/cli/config/config.go b/tools/wasp-cli/cli/config/config.go index 054974bf9b..c57ff9b55a 100644 --- a/tools/wasp-cli/cli/config/config.go +++ b/tools/wasp-cli/cli/config/config.go @@ -158,7 +158,7 @@ func AddWaspNode(name, apiURL string) { } func AddChain(name, chainID string) { - Set("chains."+name, chainID) + Set("chainrunner."+name, chainID) } func WriteConfig() error { @@ -175,7 +175,7 @@ func WriteConfig() error { } func GetChain(name string) isc.ChainID { - configChainID := Config.String("chains." + strings.ToLower(name)) + configChainID := Config.String("chainrunner." + strings.ToLower(name)) if configChainID == "" { log.Fatal(fmt.Sprintf("chain '%s' doesn't exist in config file", name)) } From 35295d0b848c1944a543c57bf59e37c63e14a05a Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Tue, 19 Aug 2025 06:36:50 -0700 Subject: [PATCH 12/27] Some renamings --- config_defaults.json | 2 +- documentation/docs/configuration.md | 4 +- .../accessmanager/dist/access_manager_dist.go | 58 +++++++++---------- .../accessmanager/dist/msg_access.go | 6 +- packages/webapi/services/chain.go | 1 + 5 files changed, 36 insertions(+), 35 deletions(-) diff --git a/config_defaults.json b/config_defaults.json index 407366db95..590ed6a75e 100755 --- a/config_defaults.json +++ b/config_defaults.json @@ -88,7 +88,7 @@ "mempoolOnLedgerRefreshMinInterval": "10m" }, "snapshots": { - "snapshotsToLoad": [], + "snapshotToLoad": "", "period": 0, "delay": 20, "localPath": "waspdb/snap", diff --git a/documentation/docs/configuration.md b/documentation/docs/configuration.md index b01be0101a..d17f169e3c 100755 --- a/documentation/docs/configuration.md +++ b/documentation/docs/configuration.md @@ -337,7 +337,7 @@ Example: | Name | Description | Type | Default value | | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------- | -| snapshotsToLoad | List of snapshots to load; can be either single block hash of a snapshot (if a single chain has to be configured) or list of ':' to configure many chains | array | | +| snapshotToLoad | Single block hash of a snapshot | string | | | period | How often state snapshots should be made: 1000 meaning "every 1000th state", 0 meaning "making snapshots is disabled" | uint | 0 | | delay | How many states should pass before snapshot is produced | uint | 20 | | localPath | The path to the snapshots folder in this node's disk | string | "waspdb/snap" | @@ -348,7 +348,7 @@ Example: ```json { "snapshots": { - "snapshotsToLoad": [], + "snapshotToLoad": "", "period": 0, "delay": 20, "localPath": "waspdb/snap", diff --git a/packages/chainrunner/accessmanager/dist/access_manager_dist.go b/packages/chainrunner/accessmanager/dist/access_manager_dist.go index 45a8c49fe8..f63bdf1fdf 100644 --- a/packages/chainrunner/accessmanager/dist/access_manager_dist.go +++ b/packages/chainrunner/accessmanager/dist/access_manager_dist.go @@ -154,11 +154,11 @@ func (amd *accessMgrDist) handleInputTrustedNodes(input *inputTrustedNodes) gpa. if amd.nodes.Has(trustedNodeID) { continue } - isAccessNode := false + hasAccess := false if amd.chain != nil && amd.chain.IsAccessGrantedFor(trustedNodeID) { - isAccessNode = true + hasAccess = true } - trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, isAccessNode) + trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, hasAccess) msgs.AddAll(trustedNodeMsgs) amd.nodes.Set(trustedNodeID, trustedNode) } @@ -266,29 +266,29 @@ func (amc *accessMgrChain) Disabled() { //////////////////////////////////////////////////////////////////////////////// type accessMgrNode struct { - nodeID gpa.NodeID - pubKey *cryptolib.PublicKey - ourLC int - peerLC int - isAccessNode bool - isServer bool + nodeID gpa.NodeID + pubKey *cryptolib.PublicKey + ourLC int + peerLC int + hasAccess bool + isServer bool } func newAccessMgrNode( nodeID gpa.NodeID, pubKey *cryptolib.PublicKey, - isAccessNode bool, + hasAccess bool, ) (*accessMgrNode, gpa.OutMessages) { amn := &accessMgrNode{ - nodeID: nodeID, - pubKey: pubKey, - ourLC: 1, - peerLC: 0, - isAccessNode: isAccessNode, - isServer: false, + nodeID: nodeID, + pubKey: pubKey, + ourLC: 1, + peerLC: 0, + hasAccess: hasAccess, + isServer: false, } msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.isAccessNode, amn.isServer)) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) return amn, msgs } @@ -300,51 +300,51 @@ func (amn *accessMgrNode) SetChainAccess(access bool) gpa.OutMessages { } func (amn *accessMgrNode) grantAccess() gpa.OutMessages { - if amn.isAccessNode { + if amn.hasAccess { return nil } - amn.isAccessNode = true + amn.hasAccess = true amn.ourLC++ msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.isAccessNode, amn.isServer)) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) return msgs } func (amn *accessMgrNode) revokeAccess() gpa.OutMessages { - if !amn.isAccessNode { + if !amn.hasAccess { return nil } - amn.isAccessNode = false + amn.hasAccess = false amn.ourLC++ msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.isAccessNode, amn.isServer)) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) return msgs } func (amn *accessMgrNode) handleMsgAccess(msg *msgAccess) gpa.OutMessages { // This has to be checked before updating the state. // > IF /\ m.access = isServer(n, m.src) \* Peer's info hasn't changed, so we don't need to ack it. - // > /\ m.server = H(isAccessNode(n, m.src)) \* Our info echoed, so that was an ack. + // > /\ m.server = H(hasAccess(n, m.src)) \* Our info echoed, so that was an ack. // > /\ m.src_lc >= lClock[n][m.src] \* Peer's clock is not outdated, we don't need to push it forward. // > /\ m.dst_lc <= lClock[n][n] \* And the echoed clock don't exceed our clock, so we don't need to push it. // > THEN sendAndAck(m, {}) // > ELSE sendAndAck(m, accessMsgs(n)) sendDone := true && - msg.isAccessNode == amn.isServer && - msg.isServer == amn.isAccessNode && + msg.hasAccess == amn.isServer && + msg.isServer == amn.hasAccess && msg.senderLClock >= amn.peerLC && msg.receiverLClock <= amn.ourLC // // Update isServer and peerLC. if msg.senderLClock > amn.peerLC { - amn.isServer = msg.isAccessNode + amn.isServer = msg.hasAccess amn.peerLC = msg.senderLClock } // // Update ourLC. if amn.ourLC <= msg.receiverLClock { amn.ourLC = msg.receiverLClock - if !amn.isAccessNode == msg.isServer { + if !amn.hasAccess == msg.isServer { amn.ourLC++ } } @@ -352,7 +352,7 @@ func (amn *accessMgrNode) handleMsgAccess(msg *msgAccess) gpa.OutMessages { // Send message back, if needed. if !sendDone { return gpa.NoMessages().Add( - newMsgAccess(msg.Sender(), amn.ourLC, amn.peerLC, amn.isAccessNode, amn.isServer), + newMsgAccess(msg.Sender(), amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer), ) } return nil diff --git a/packages/chainrunner/accessmanager/dist/msg_access.go b/packages/chainrunner/accessmanager/dist/msg_access.go index 5ad72590d1..011683c688 100644 --- a/packages/chainrunner/accessmanager/dist/msg_access.go +++ b/packages/chainrunner/accessmanager/dist/msg_access.go @@ -12,7 +12,7 @@ type msgAccess struct { gpa.BasicMessage senderLClock int `bcs:"export,type=u32"` receiverLClock int `bcs:"export,type=u32"` - isAccessNode bool `bcs:"export"` + hasAccess bool `bcs:"export"` isServer bool `bcs:"export"` } @@ -21,14 +21,14 @@ var _ gpa.Message = new(msgAccess) func newMsgAccess( recipient gpa.NodeID, senderLClock, receiverLClock int, - isAccessNode bool, + hasAccess bool, isServer bool, ) gpa.Message { return &msgAccess{ BasicMessage: gpa.NewBasicMessage(recipient), senderLClock: senderLClock, receiverLClock: receiverLClock, - isAccessNode: isAccessNode, + hasAccess: hasAccess, isServer: isServer, } } diff --git a/packages/webapi/services/chain.go b/packages/webapi/services/chain.go index d9efee1765..5b8a20d953 100644 --- a/packages/webapi/services/chain.go +++ b/packages/webapi/services/chain.go @@ -12,6 +12,7 @@ import ( "github.com/iotaledger/wasp/v2/clients/iota-go/iotago" chainpkg "github.com/iotaledger/wasp/v2/packages/chain" + "github.com/iotaledger/wasp/v2/packages/chainrunner" "github.com/iotaledger/wasp/v2/packages/isc" "github.com/iotaledger/wasp/v2/packages/kv" "github.com/iotaledger/wasp/v2/packages/metrics" From efa12b7f07d7115052eb9da1554d8db8511b060c Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Tue, 19 Aug 2025 07:35:03 -0700 Subject: [PATCH 13/27] Removing some of unneeded changes --- packages/chain/node.go | 6 +++--- packages/chain/statemanager/gpa/utils/block_wal.go | 2 +- .../accessmanager/dist/access_manager_dist.go | 9 ++++----- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/chain/node.go b/packages/chain/node.go index 234dcbd616..973f3d5f12 100644 --- a/packages/chain/node.go +++ b/packages/chain/node.go @@ -270,7 +270,7 @@ func New( mempoolBroadcastInterval time.Duration, originDeposit coin.Value, ) (Chain, error) { - log.LogDebugf("Starting the chain, chainID=%v") + log.LogDebugf("Starting the chain, chainID=%v", chainID) if listener == nil { listener = NewEmptyChainListener() } @@ -342,7 +342,7 @@ func New( // Create sub-components. chainMgr, err := chainmanager.New( cni.me, - chainID, + cni.chainID, cni.chainStore, consensusStateRegistry, dkShareRegistryProvider, @@ -400,7 +400,7 @@ func New( peerPubKeys = append(peerPubKeys, cni.accessNodesFromNode...) stateMgr, err := statemanager.New( ctx, - chainID, + cni.chainID, nodeIdentity.GetPublicKey(), peerPubKeys, net, diff --git a/packages/chain/statemanager/gpa/utils/block_wal.go b/packages/chain/statemanager/gpa/utils/block_wal.go index 73edf1cc18..966da5c7c9 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal.go +++ b/packages/chain/statemanager/gpa/utils/block_wal.go @@ -33,7 +33,7 @@ const ( constBlockWALTmpFileSuffix = ".tmp" ) -// Chain kept for backward compatibility +// Chain ID kept for backward compatibility func NewBlockWAL(log log.Logger, baseDir string, chainID isc.ChainID, metrics *metrics.ChainBlockWALMetrics) (BlockWAL, error) { dir := filepath.Join(baseDir, chainID.String()) if err := ioutils.CreateDirectory(dir, 0o777); err != nil { diff --git a/packages/chainrunner/accessmanager/dist/access_manager_dist.go b/packages/chainrunner/accessmanager/dist/access_manager_dist.go index f63bdf1fdf..efc51c9bad 100644 --- a/packages/chainrunner/accessmanager/dist/access_manager_dist.go +++ b/packages/chainrunner/accessmanager/dist/access_manager_dist.go @@ -62,11 +62,10 @@ func (amd *accessMgrDist) AsGPA() gpa.GPA { // Implements the Output interface. func (amd *accessMgrDist) ChainServerNodes() []*cryptolib.PublicKey { - if amd.chain == nil { - return []*cryptolib.PublicKey{} + if amd.chain != nil { + return amd.chain.server.Values() } - - return amd.chain.server.Values() + return []*cryptolib.PublicKey{} } // Implements the gpa.GPA interface. @@ -106,7 +105,7 @@ func (amd *accessMgrDist) handleInputChainDisabled(input *inputChainDisabled) gp return nil // Already disabled. } amd.chain.Disabled() - amd.chain = nil // Forget the chain. + amd.chain = nil msgs := gpa.NoMessages() amd.nodes.ForEach(func(_ gpa.NodeID, node *accessMgrNode) bool { msgs.AddAll(node.SetChainAccess(false)) From f8eed0acb770353eb5a0ed96824eaed58c409ebb Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Wed, 20 Aug 2025 04:28:37 -0700 Subject: [PATCH 14/27] Removing some of unneeded changes --- packages/webapi/controllers/corecontracts/governance.go | 6 +++--- packages/webapi/services/offledger.go | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/webapi/controllers/corecontracts/governance.go b/packages/webapi/controllers/corecontracts/governance.go index 7ee2055671..3eb59fcd5b 100644 --- a/packages/webapi/controllers/corecontracts/governance.go +++ b/packages/webapi/controllers/corecontracts/governance.go @@ -12,9 +12,9 @@ import ( "github.com/iotaledger/wasp/v2/packages/webapi/params" ) -func MapGovChainInfoResponse(chID string, chainInfo *isc.ChainInfo) models.GovChainInfoResponse { +func MapGovChainInfoResponse(chainInfo *isc.ChainInfo) models.GovChainInfoResponse { return models.GovChainInfoResponse{ - ChainID: chID, + ChainID: chainInfo.ChainID.String(), ChainAdmin: chainInfo.ChainAdmin.String(), GasFeePolicy: chainInfo.GasFeePolicy, GasLimits: chainInfo.GasLimits, @@ -40,7 +40,7 @@ func (c *Controller) getChainInfo(e echo.Context) error { return c.handleViewCallError(err) } - chainInfoResponse := MapGovChainInfoResponse(ch.ID().String(), chainInfo) + chainInfoResponse := MapGovChainInfoResponse(chainInfo) return e.JSON(http.StatusOK, chainInfoResponse) } diff --git a/packages/webapi/services/offledger.go b/packages/webapi/services/offledger.go index 9d211759cb..2ea92c867f 100644 --- a/packages/webapi/services/offledger.go +++ b/packages/webapi/services/offledger.go @@ -66,6 +66,12 @@ func (c *OffLedgerService) EnqueueOffLedgerRequest(binaryRequest []byte) error { return err } + // check req is for the correct chain + if !asOffLedgerRequest.ChainID().Equals(chain.ID()) { + // do not add to cache, it can still be sent to the correct chain + return errors.New("request is for a different chain") + } + if err := chain.ReceiveOffLedgerRequest(asOffLedgerRequest, c.networkProvider.Self().PubKey()); err != nil { return fmt.Errorf("tx not added to the mempool: %v", err.Error()) } From f883b2026fb651d7b578fe9f985628d591ba8622 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Wed, 20 Aug 2025 06:30:40 -0700 Subject: [PATCH 15/27] Removed chain provider; Renamed chains into chain runner or chain --- components/chainrunner/params.go | 2 +- components/webapi/component.go | 6 ++---- config.json | 2 +- config_defaults.json | 2 +- documentation/docs/configuration.md | 4 ++-- packages/chainrunner/runner.go | 6 +----- packages/webapi/api.go | 16 ++++++++-------- packages/webapi/services/chain.go | 16 ++++++++-------- packages/webapi/services/committee.go | 8 ++++---- packages/webapi/services/evm.go | 8 ++++---- packages/webapi/services/metrics.go | 12 ++++++------ packages/webapi/services/node.go | 8 ++++---- packages/webapi/services/peering.go | 6 +++--- packages/webapi/services/registry.go | 6 +++--- test/config.json | 2 +- tools/cluster/waspconfig.go | 2 +- 16 files changed, 50 insertions(+), 56 deletions(-) diff --git a/components/chainrunner/params.go b/components/chainrunner/params.go index d738cf66ce..50f1c1e465 100644 --- a/components/chainrunner/params.go +++ b/components/chainrunner/params.go @@ -74,7 +74,7 @@ var ( var params = &app.ComponentParams{ Params: map[string]any{ - "chains": ParamsChainRunner, // TODO: fix the name + "chain": ParamsChainRunner, "wal": ParamsWAL, "validator": ParamsValidator, "stateManager": ParamsStateManager, diff --git a/components/webapi/component.go b/components/webapi/component.go index 7b212a78d9..676e2cebfd 100644 --- a/components/webapi/component.go +++ b/components/webapi/component.go @@ -216,7 +216,7 @@ func provide(c *dig.Container) error { AppConfig *configuration.Configuration `name:"appConfig"` ShutdownHandler *shutdown.ShutdownHandler APICacheTTL time.Duration `name:"apiCacheTTL"` - Chains *chainrunner.ChainRunner + ChainRunner *chainrunner.ChainRunner ChainMetricsProvider *metrics.ChainMetricsProvider ChainRecordRegistryProvider registry.ChainRecordRegistryProvider DKShareRegistryProvider registry.DKShareRegistryProvider @@ -277,9 +277,7 @@ func provide(c *dig.Container) error { deps.ChainRecordRegistryProvider, deps.DKShareRegistryProvider, deps.NodeIdentityProvider, - func() *chainrunner.ChainRunner { - return deps.Chains - }, + deps.ChainRunner, func() *dkg.Node { return deps.Node }, diff --git a/config.json b/config.json index 9ffb1be4fc..e4b95688a8 100644 --- a/config.json +++ b/config.json @@ -64,7 +64,7 @@ "peeringURL": "0.0.0.0:4000", "port": 4000 }, - "chains": { + "chain": { "broadcastUpToNPeers": 2, "broadcastInterval": "5s", "apiCacheTTL": "5m", diff --git a/config_defaults.json b/config_defaults.json index 590ed6a75e..74c6978b4a 100755 --- a/config_defaults.json +++ b/config_defaults.json @@ -64,7 +64,7 @@ "peeringURL": "0.0.0.0:4000", "port": 4000 }, - "chains": { + "chain": { "broadcastUpToNPeers": 2, "broadcastInterval": "0s", "apiCacheTTL": "5m", diff --git a/documentation/docs/configuration.md b/documentation/docs/configuration.md index d17f169e3c..772cff4d43 100755 --- a/documentation/docs/configuration.md +++ b/documentation/docs/configuration.md @@ -277,7 +277,7 @@ Example: } ``` -## 9. Chains +## 9. Chain | Name | Description | Type | Default value | | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | ------------- | @@ -307,7 +307,7 @@ Example: ```json { - "chains": { + "chain": { "broadcastUpToNPeers": 2, "broadcastInterval": "0s", "apiCacheTTL": "5m", diff --git a/packages/chainrunner/runner.go b/packages/chainrunner/runner.go index 4b6e2f4c80..8bba137b0c 100644 --- a/packages/chainrunner/runner.go +++ b/packages/chainrunner/runner.go @@ -36,10 +36,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/webapi/interfaces" ) -type Provider func() *ChainRunner // TODO: Use DI instead of that. - -type ChainProvider func() chain.Chain - type ChainRunner struct { ctx context.Context log log.Logger @@ -210,7 +206,7 @@ func (c *ChainRunner) Run(ctx context.Context) error { defer c.mutex.Unlock() if c.ctx != nil { - return errors.New("chains already running") + return errors.New("chain already running") } c.ctx = ctx diff --git a/packages/webapi/api.go b/packages/webapi/api.go index 1429f6a5d7..81ab95205e 100644 --- a/packages/webapi/api.go +++ b/packages/webapi/api.go @@ -86,7 +86,7 @@ func Init( chainRecordRegistryProvider registry.ChainRecordRegistryProvider, dkShareRegistryProvider registry.DKShareRegistryProvider, nodeIdentityProvider registry.NodeIdentityProvider, - chainsProvider chainrunner.Provider, + chainRunner *chainrunner.ChainRunner, dkgNodeProvider dkg.NodeProvider, shutdownHandler *shutdown.ShutdownHandler, chainMetricsProvider *metrics.ChainMetricsProvider, @@ -103,14 +103,14 @@ func Init( mocker := NewMocker() mocker.LoadMockFiles() - chainService := services.NewChainService(logger, chainsProvider, chainMetricsProvider, chainRecordRegistryProvider) - committeeService := services.NewCommitteeService(chainsProvider, networkProvider, dkShareRegistryProvider) - registryService := services.NewRegistryService(chainsProvider, chainRecordRegistryProvider) + chainService := services.NewChainService(logger, chainRunner, chainMetricsProvider, chainRecordRegistryProvider) + committeeService := services.NewCommitteeService(chainRunner, networkProvider, dkShareRegistryProvider) + registryService := services.NewRegistryService(chainRunner, chainRecordRegistryProvider) offLedgerService := services.NewOffLedgerService(chainService, networkProvider, requestCacheTTL) - metricsService := services.NewMetricsService(chainsProvider, chainMetricsProvider) - peeringService := services.NewPeeringService(chainsProvider, networkProvider, trustedNetworkManager) - evmService := services.NewEVMService(chainsProvider, chainService, networkProvider, pub, indexDBPath, chainMetricsProvider, jsonrpcParams, logger.NewChildLogger("EVMService")) - nodeService := services.NewNodeService(chainRecordRegistryProvider, nodeIdentityProvider, chainsProvider, shutdownHandler, trustedNetworkManager, l1ParamsFetcher) + metricsService := services.NewMetricsService(chainRunner, chainMetricsProvider) + peeringService := services.NewPeeringService(chainRunner, networkProvider, trustedNetworkManager) + evmService := services.NewEVMService(chainRunner, chainService, networkProvider, pub, indexDBPath, chainMetricsProvider, jsonrpcParams, logger.NewChildLogger("EVMService")) + nodeService := services.NewNodeService(chainRecordRegistryProvider, nodeIdentityProvider, chainRunner, shutdownHandler, trustedNetworkManager, l1ParamsFetcher) dkgService := services.NewDKGService(dkShareRegistryProvider, dkgNodeProvider, trustedNetworkManager) userService := services.NewUserService(userManager) // -- diff --git a/packages/webapi/services/chain.go b/packages/webapi/services/chain.go index 5b8a20d953..57a6b2bc65 100644 --- a/packages/webapi/services/chain.go +++ b/packages/webapi/services/chain.go @@ -28,20 +28,20 @@ import ( type ChainService struct { log log.Logger - chainsProvider chainrunner.Provider + chainRunner *chainrunner.ChainRunner chainMetricsProvider *metrics.ChainMetricsProvider chainRecordRegistryProvider registry.ChainRecordRegistryProvider } func NewChainService( logger log.Logger, - chainsProvider chainrunner.Provider, + chainRunner *chainrunner.ChainRunner, chainMetricsProvider *metrics.ChainMetricsProvider, chainRecordRegistryProvider registry.ChainRecordRegistryProvider, ) interfaces.ChainService { return &ChainService{ log: logger, - chainsProvider: chainsProvider, + chainRunner: chainRunner, chainMetricsProvider: chainMetricsProvider, chainRecordRegistryProvider: chainRecordRegistryProvider, } @@ -53,7 +53,7 @@ func (c *ChainService) ActivateChain() error { return err } - return c.chainsProvider().Activate() + return c.chainRunner.Activate() } func (c *ChainService) DeactivateChain() error { @@ -62,7 +62,7 @@ func (c *ChainService) DeactivateChain() error { return err } - return c.chainsProvider().Deactivate() + return c.chainRunner.Deactivate() } func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { @@ -103,11 +103,11 @@ func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { c.log.LogInfof("Chainrecord active %v", chainRecord.Active) if chainRecord.Active { - if err := c.chainsProvider().Activate(); err != nil { + if err := c.chainRunner.Activate(); err != nil { return err } } else if storedChainRec != nil { - if err := c.chainsProvider().Deactivate(); err != nil { + if err := c.chainRunner.Deactivate(); err != nil { return err } } @@ -116,7 +116,7 @@ func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { } func (c *ChainService) GetChain() (chainpkg.Chain, error) { - return c.chainsProvider().Get() + return c.chainRunner.Get() } func (c *ChainService) GetEVMChainID(blockIndexOrTrieRoot string) (uint16, error) { diff --git a/packages/webapi/services/committee.go b/packages/webapi/services/committee.go index 6fdd53314a..79ca1099d1 100644 --- a/packages/webapi/services/committee.go +++ b/packages/webapi/services/committee.go @@ -16,14 +16,14 @@ import ( var ErrNotInCommittee = errors.New("this node is not in the committee for the chain") type CommitteeService struct { - chainsProvider chainrunner.Provider + chainRunner *chainrunner.ChainRunner networkProvider peering.NetworkProvider dkShareRegistryProvider registry.DKShareRegistryProvider } -func NewCommitteeService(chainsProvider chainrunner.Provider, networkProvider peering.NetworkProvider, dkShareRegistryProvider registry.DKShareRegistryProvider) interfaces.CommitteeService { +func NewCommitteeService(chainRunner *chainrunner.ChainRunner, networkProvider peering.NetworkProvider, dkShareRegistryProvider registry.DKShareRegistryProvider) interfaces.CommitteeService { return &CommitteeService{ - chainsProvider: chainsProvider, + chainRunner: chainRunner, networkProvider: networkProvider, dkShareRegistryProvider: dkShareRegistryProvider, } @@ -34,7 +34,7 @@ func (c *CommitteeService) GetPublicKey() *cryptolib.PublicKey { } func (c *CommitteeService) GetCommitteeInfo() (*dto.ChainNodeInfo, error) { - chain, err := c.chainsProvider().Get() + chain, err := c.chainRunner.Get() if err != nil { return nil, err } diff --git a/packages/webapi/services/evm.go b/packages/webapi/services/evm.go index ec06a02aa6..4f66f14bf7 100644 --- a/packages/webapi/services/evm.go +++ b/packages/webapi/services/evm.go @@ -31,7 +31,7 @@ type EVMService struct { websocketContextMutex sync.Mutex websocketContext *websocketContext - chainsProvider chainrunner.Provider + chainRunner *chainrunner.ChainRunner chainService interfaces.ChainService networkProvider peering.NetworkProvider publisher *publisher.Publisher @@ -42,7 +42,7 @@ type EVMService struct { } func NewEVMService( - chainsProvider chainrunner.Provider, + chainRunner *chainrunner.ChainRunner, chainService interfaces.ChainService, networkProvider peering.NetworkProvider, pub *publisher.Publisher, @@ -52,7 +52,7 @@ func NewEVMService( log log.Logger, ) interfaces.EVMService { return &EVMService{ - chainsProvider: chainsProvider, + chainRunner: chainRunner, chainService: chainService, evmChainServers: map[isc.ChainID]*chainServer{}, evmBackendMutex: sync.Mutex{}, @@ -91,7 +91,7 @@ func (e *EVMService) getEVMBackend() (*chainServer, error) { jsonrpc.NewEVMChain( backend, e.publisher, - e.chainsProvider().IsArchiveNode(), + e.chainRunner.IsArchiveNode(), hivedb.EngineRocksDB, e.indexDBPath, e.log.NewChildLogger("EVMChain"), diff --git a/packages/webapi/services/metrics.go b/packages/webapi/services/metrics.go index 28eeaa0d45..8b38afe2c1 100644 --- a/packages/webapi/services/metrics.go +++ b/packages/webapi/services/metrics.go @@ -9,13 +9,13 @@ import ( ) type MetricsService struct { - chainProvider chainrunner.Provider + chainRunner *chainrunner.ChainRunner chainMetricsProvider *metrics.ChainMetricsProvider } -func NewMetricsService(chainProvider chainrunner.Provider, chainMetricsProvider *metrics.ChainMetricsProvider) interfaces.MetricsService { +func NewMetricsService(chainRunner *chainrunner.ChainRunner, chainMetricsProvider *metrics.ChainMetricsProvider) interfaces.MetricsService { return &MetricsService{ - chainProvider: chainProvider, + chainRunner: chainRunner, chainMetricsProvider: chainMetricsProvider, } } @@ -30,7 +30,7 @@ func (c *MetricsService) GetNodeMessageMetrics() *dto.NodeMessageMetrics { } func (c *MetricsService) GetChainMessageMetrics() *dto.ChainMessageMetrics { - chain, err := c.chainProvider().Get() + chain, err := c.chainRunner.Get() if err != nil { return nil } @@ -45,7 +45,7 @@ func (c *MetricsService) GetChainMessageMetrics() *dto.ChainMessageMetrics { } func (c *MetricsService) GetChainConsensusWorkflowMetrics() *models.ConsensusWorkflowMetrics { - chain, err := c.chainProvider().Get() + chain, err := c.chainRunner.Get() if err != nil { return nil } @@ -59,7 +59,7 @@ func (c *MetricsService) GetChainConsensusWorkflowMetrics() *models.ConsensusWor } func (c *MetricsService) GetChainConsensusPipeMetrics() *models.ConsensusPipeMetrics { - chain, err := c.chainProvider().Get() + chain, err := c.chainRunner.Get() if err != nil { return nil } diff --git a/packages/webapi/services/node.go b/packages/webapi/services/node.go index 2ea1568f3d..111c6e8ee6 100644 --- a/packages/webapi/services/node.go +++ b/packages/webapi/services/node.go @@ -16,7 +16,7 @@ import ( type NodeService struct { chainRecordRegistryProvider registry.ChainRecordRegistryProvider nodeIdentityProvider registry.NodeIdentityProvider - chainsProvider chainrunner.Provider + chainRunner *chainrunner.ChainRunner shutdownHandler *shutdown.ShutdownHandler trustedNetworkManager peering.TrustedNetworkManager l1ParamsFetcher parameters.L1ParamsFetcher @@ -25,7 +25,7 @@ type NodeService struct { func NewNodeService( chainRecordRegistryProvider registry.ChainRecordRegistryProvider, nodeIdentityProvider registry.NodeIdentityProvider, - chainsProvider chainrunner.Provider, + chainRunner *chainrunner.ChainRunner, shutdownHandler *shutdown.ShutdownHandler, trustedNetworkManager peering.TrustedNetworkManager, l1ParamsFetcher parameters.L1ParamsFetcher, @@ -33,7 +33,7 @@ func NewNodeService( return &NodeService{ chainRecordRegistryProvider: chainRecordRegistryProvider, nodeIdentityProvider: nodeIdentityProvider, - chainsProvider: chainsProvider, + chainRunner: chainRunner, shutdownHandler: shutdownHandler, trustedNetworkManager: trustedNetworkManager, l1ParamsFetcher: l1ParamsFetcher, @@ -72,7 +72,7 @@ func (n *NodeService) DeleteAccessNode(peerPubKeyOrName string) error { func (n *NodeService) NodeOwnerCertificate() []byte { nodeIdentity := n.nodeIdentityProvider.NodeIdentity() - return governance.NewNodeOwnershipCertificate(nodeIdentity, n.chainsProvider().ValidatorAddress()) + return governance.NewNodeOwnershipCertificate(nodeIdentity, n.chainRunner.ValidatorAddress()) } func (n *NodeService) ShutdownNode() { diff --git a/packages/webapi/services/peering.go b/packages/webapi/services/peering.go index c7ac596517..92c80af658 100644 --- a/packages/webapi/services/peering.go +++ b/packages/webapi/services/peering.go @@ -11,14 +11,14 @@ import ( ) type PeeringService struct { - chainsProvider chainrunner.Provider + chainRunner *chainrunner.ChainRunner networkProvider peering.NetworkProvider trustedNetworkManager peering.TrustedNetworkManager } -func NewPeeringService(chainsProvider chainrunner.Provider, networkProvider peering.NetworkProvider, trustedNetworkManager peering.TrustedNetworkManager) *PeeringService { +func NewPeeringService(chainRunner *chainrunner.ChainRunner, networkProvider peering.NetworkProvider, trustedNetworkManager peering.TrustedNetworkManager) *PeeringService { return &PeeringService{ - chainsProvider: chainsProvider, + chainRunner: chainRunner, networkProvider: networkProvider, trustedNetworkManager: trustedNetworkManager, } diff --git a/packages/webapi/services/registry.go b/packages/webapi/services/registry.go index 575f971791..d94ef99b8b 100644 --- a/packages/webapi/services/registry.go +++ b/packages/webapi/services/registry.go @@ -7,13 +7,13 @@ import ( ) type RegistryService struct { - chainsProvider chainrunner.Provider + chainRunner *chainrunner.ChainRunner chainRecordRegistryProvider registry.ChainRecordRegistryProvider } -func NewRegistryService(chainsProvider chainrunner.Provider, chainRecordRegistryProvider registry.ChainRecordRegistryProvider) interfaces.RegistryService { +func NewRegistryService(chainRunner *chainrunner.ChainRunner, chainRecordRegistryProvider registry.ChainRecordRegistryProvider) interfaces.RegistryService { return &RegistryService{ - chainsProvider: chainsProvider, + chainRunner: chainRunner, chainRecordRegistryProvider: chainRecordRegistryProvider, } } diff --git a/test/config.json b/test/config.json index e0f0dce174..6d9da17037 100755 --- a/test/config.json +++ b/test/config.json @@ -69,7 +69,7 @@ "peeringURL": "0.0.0.0:4000", "port": 4000 }, - "chains": { + "chain": { "broadcastUpToNPeers": 2, "broadcastInterval": "5s", "apiCacheTTL": "5m", diff --git a/tools/cluster/waspconfig.go b/tools/cluster/waspconfig.go index 5627c4dc38..459a238085 100644 --- a/tools/cluster/waspconfig.go +++ b/tools/cluster/waspconfig.go @@ -92,7 +92,7 @@ var waspConfigTemplate = ` "peeringURL": "localhost:{{.PeeringPort}}", "port": {{.PeeringPort}} }, - "chains": { + "chain": { "broadcastUpToNPeers": 2, "broadcastInterval": "5s", "apiCacheTTL": "5m", From 91d8986e3605e82984849a867dc0a2d6a09fa000 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Wed, 20 Aug 2025 06:53:34 -0700 Subject: [PATCH 16/27] More renamings; Removed some unneeded changes --- packages/chainrunner/runner.go | 4 ++-- packages/webapi/services/chain.go | 2 +- packages/webapi/services/committee.go | 2 +- packages/webapi/services/metrics.go | 6 +++--- tools/cluster/tests/wasp-cli_rotation_test.go | 1 - tools/wasp-cli/chain/access-nodes.go | 2 +- tools/wasp-cli/chain/activate.go | 2 +- tools/wasp-cli/cli/config/config.go | 4 ++-- 8 files changed, 11 insertions(+), 12 deletions(-) diff --git a/packages/chainrunner/runner.go b/packages/chainrunner/runner.go index 8bba137b0c..3fbac151d9 100644 --- a/packages/chainrunner/runner.go +++ b/packages/chainrunner/runner.go @@ -420,9 +420,9 @@ func (c *ChainRunner) Deactivate() error { return nil } -// Get returns active chain object or nil if it doesn't exist +// Chain returns active chain object or nil if it doesn't exist // lazy unsubscribing -func (c *ChainRunner) Get() (chain.Chain, error) { +func (c *ChainRunner) Chain() (chain.Chain, error) { c.mutex.RLock() defer c.mutex.RUnlock() diff --git a/packages/webapi/services/chain.go b/packages/webapi/services/chain.go index 57a6b2bc65..6702402382 100644 --- a/packages/webapi/services/chain.go +++ b/packages/webapi/services/chain.go @@ -116,7 +116,7 @@ func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { } func (c *ChainService) GetChain() (chainpkg.Chain, error) { - return c.chainRunner.Get() + return c.chainRunner.Chain() } func (c *ChainService) GetEVMChainID(blockIndexOrTrieRoot string) (uint16, error) { diff --git a/packages/webapi/services/committee.go b/packages/webapi/services/committee.go index 79ca1099d1..90d9c8bfe6 100644 --- a/packages/webapi/services/committee.go +++ b/packages/webapi/services/committee.go @@ -34,7 +34,7 @@ func (c *CommitteeService) GetPublicKey() *cryptolib.PublicKey { } func (c *CommitteeService) GetCommitteeInfo() (*dto.ChainNodeInfo, error) { - chain, err := c.chainRunner.Get() + chain, err := c.chainRunner.Chain() if err != nil { return nil, err } diff --git a/packages/webapi/services/metrics.go b/packages/webapi/services/metrics.go index 8b38afe2c1..f519437b80 100644 --- a/packages/webapi/services/metrics.go +++ b/packages/webapi/services/metrics.go @@ -30,7 +30,7 @@ func (c *MetricsService) GetNodeMessageMetrics() *dto.NodeMessageMetrics { } func (c *MetricsService) GetChainMessageMetrics() *dto.ChainMessageMetrics { - chain, err := c.chainRunner.Get() + chain, err := c.chainRunner.Chain() if err != nil { return nil } @@ -45,7 +45,7 @@ func (c *MetricsService) GetChainMessageMetrics() *dto.ChainMessageMetrics { } func (c *MetricsService) GetChainConsensusWorkflowMetrics() *models.ConsensusWorkflowMetrics { - chain, err := c.chainRunner.Get() + chain, err := c.chainRunner.Chain() if err != nil { return nil } @@ -59,7 +59,7 @@ func (c *MetricsService) GetChainConsensusWorkflowMetrics() *models.ConsensusWor } func (c *MetricsService) GetChainConsensusPipeMetrics() *models.ConsensusPipeMetrics { - chain, err := c.chainRunner.Get() + chain, err := c.chainRunner.Chain() if err != nil { return nil } diff --git a/tools/cluster/tests/wasp-cli_rotation_test.go b/tools/cluster/tests/wasp-cli_rotation_test.go index 98297bd989..62c59cdadc 100644 --- a/tools/cluster/tests/wasp-cli_rotation_test.go +++ b/tools/cluster/tests/wasp-cli_rotation_test.go @@ -68,7 +68,6 @@ func testWaspCLIExternalRotation(t *testing.T, addAccessNode func(*WaspCLITest, fmt.Sprintf("--gov-controller=%s", w.WaspCliAddress.String()), "--node=0", ) - // TODO: FIX this test // matches := regexp.MustCompile(`.*ChainID:\s*([a-zA-Z0-9_]*)\s+.*`).FindStringSubmatch(strings.Join(out, " ")) // chainID := matches[1] w.ActivateChainOnAllNodes("chain1", 0) diff --git a/tools/wasp-cli/chain/access-nodes.go b/tools/wasp-cli/chain/access-nodes.go index 3d43aed992..bf75042566 100644 --- a/tools/wasp-cli/chain/access-nodes.go +++ b/tools/wasp-cli/chain/access-nodes.go @@ -1,7 +1,7 @@ // Copyright 2022 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -// Package chain provides functionality for interacting with and managing IOTA smart contract chainrunner. +// Package chain provides functionality for interacting with and managing IOTA smart contract chains. package chain import ( diff --git a/tools/wasp-cli/chain/activate.go b/tools/wasp-cli/chain/activate.go index 7ef4e08097..15fb12b8b4 100644 --- a/tools/wasp-cli/chain/activate.go +++ b/tools/wasp-cli/chain/activate.go @@ -60,7 +60,7 @@ func activateChain(ctx context.Context, node string, chainName string, chainID i log.Check(err) } - log.Printf("Chain: %v (%v)\nActivated\n", chainName) + log.Printf("Chain: %v (%v)\nActivated\n", chainID, chainName) } func initDeactivateCmd() *cobra.Command { diff --git a/tools/wasp-cli/cli/config/config.go b/tools/wasp-cli/cli/config/config.go index c57ff9b55a..054974bf9b 100644 --- a/tools/wasp-cli/cli/config/config.go +++ b/tools/wasp-cli/cli/config/config.go @@ -158,7 +158,7 @@ func AddWaspNode(name, apiURL string) { } func AddChain(name, chainID string) { - Set("chainrunner."+name, chainID) + Set("chains."+name, chainID) } func WriteConfig() error { @@ -175,7 +175,7 @@ func WriteConfig() error { } func GetChain(name string) isc.ChainID { - configChainID := Config.String("chainrunner." + strings.ToLower(name)) + configChainID := Config.String("chains." + strings.ToLower(name)) if configChainID == "" { log.Fatal(fmt.Sprintf("chain '%s' doesn't exist in config file", name)) } From d98d90716dd7bb0ec72e7ca4b6f8de0c8b59bbe4 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Wed, 20 Aug 2025 06:58:19 -0700 Subject: [PATCH 17/27] Minor cleanup --- packages/chain/chain.go | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/chain/chain.go b/packages/chain/chain.go index e78a3e61f0..3ea641e83e 100644 --- a/packages/chain/chain.go +++ b/packages/chain/chain.go @@ -42,7 +42,6 @@ type ChainNodeConn interface { // confirmed or an error is detected, or the ctx is canceled. PublishTX( ctx context.Context, - tx iotasigner.SignedTransaction, callback TxPostHandler, ) error From 6a999578b7e67111ddb48d354ce8a2f005e73b9c Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Wed, 20 Aug 2025 07:11:20 -0700 Subject: [PATCH 18/27] Temporary reverted accessmanager dist folder --- .../dist/input_chain_disabled.go | 11 - .../accessmanager/dist/msg_access.go | 38 ---- .../accessmanager => chains}/dist/.gitignore | 0 .../accessmanager => chains}/dist/Makefile | 0 .../dist/WaspChainAccessNodes.png | Bin .../dist/WaspChainAccessNodes.xopp | Bin .../dist/WaspChainAccessNodesV4.tla | 0 .../dist/WaspChainAccessNodesV4_N2C1L3R0.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L3R1.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L4R0.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L4R1.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L5R0.cfg | 0 .../dist/access_manager_dist.go | 194 ++++++++++++------ .../dist/access_manager_dist_test.go | 9 +- .../dist/access_manager_rapid_test.go | 111 ++++++---- .../dist/input_access_nodes.go | 6 +- packages/chains/dist/input_chain_disabled.go | 14 ++ .../dist/input_trusted_nodes.go | 0 .../accessmanager => chains}/dist/msg.go | 0 packages/chains/dist/msg_access.go | 39 ++++ .../dist/msg_access_test.go | 10 +- 21 files changed, 265 insertions(+), 167 deletions(-) delete mode 100644 packages/chainrunner/accessmanager/dist/input_chain_disabled.go delete mode 100644 packages/chainrunner/accessmanager/dist/msg_access.go rename packages/{chainrunner/accessmanager => chains}/dist/.gitignore (100%) rename packages/{chainrunner/accessmanager => chains}/dist/Makefile (100%) rename packages/{chainrunner/accessmanager => chains}/dist/WaspChainAccessNodes.png (100%) rename packages/{chainrunner/accessmanager => chains}/dist/WaspChainAccessNodes.xopp (100%) rename packages/{chainrunner/accessmanager => chains}/dist/WaspChainAccessNodesV4.tla (100%) rename packages/{chainrunner/accessmanager => chains}/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg (100%) rename packages/{chainrunner/accessmanager => chains}/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg (100%) rename packages/{chainrunner/accessmanager => chains}/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg (100%) rename packages/{chainrunner/accessmanager => chains}/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg (100%) rename packages/{chainrunner/accessmanager => chains}/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg (100%) rename packages/{chainrunner/accessmanager => chains}/dist/access_manager_dist.go (59%) rename packages/{chainrunner/accessmanager => chains}/dist/access_manager_dist_test.go (81%) rename packages/{chainrunner/accessmanager => chains}/dist/access_manager_rapid_test.go (53%) rename packages/{chainrunner/accessmanager => chains}/dist/input_access_nodes.go (56%) create mode 100644 packages/chains/dist/input_chain_disabled.go rename packages/{chainrunner/accessmanager => chains}/dist/input_trusted_nodes.go (100%) rename packages/{chainrunner/accessmanager => chains}/dist/msg.go (100%) create mode 100644 packages/chains/dist/msg_access.go rename packages/{chainrunner/accessmanager => chains}/dist/msg_access_test.go (57%) diff --git a/packages/chainrunner/accessmanager/dist/input_chain_disabled.go b/packages/chainrunner/accessmanager/dist/input_chain_disabled.go deleted file mode 100644 index 4f202b1742..0000000000 --- a/packages/chainrunner/accessmanager/dist/input_chain_disabled.go +++ /dev/null @@ -1,11 +0,0 @@ -package dist - -import ( - "github.com/iotaledger/wasp/v2/packages/gpa" -) - -type inputChainDisabled struct{} - -func NewInputChainDisabled() gpa.Input { - return &inputChainDisabled{} -} diff --git a/packages/chainrunner/accessmanager/dist/msg_access.go b/packages/chainrunner/accessmanager/dist/msg_access.go deleted file mode 100644 index 011683c688..0000000000 --- a/packages/chainrunner/accessmanager/dist/msg_access.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2020 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -package dist - -import ( - "github.com/iotaledger/wasp/v2/packages/gpa" -) - -// Send by a node which has a chain enabled to a node it considers an access node. -type msgAccess struct { - gpa.BasicMessage - senderLClock int `bcs:"export,type=u32"` - receiverLClock int `bcs:"export,type=u32"` - hasAccess bool `bcs:"export"` - isServer bool `bcs:"export"` -} - -var _ gpa.Message = new(msgAccess) - -func newMsgAccess( - recipient gpa.NodeID, - senderLClock, receiverLClock int, - hasAccess bool, - isServer bool, -) gpa.Message { - return &msgAccess{ - BasicMessage: gpa.NewBasicMessage(recipient), - senderLClock: senderLClock, - receiverLClock: receiverLClock, - hasAccess: hasAccess, - isServer: isServer, - } -} - -func (msg *msgAccess) MsgType() gpa.MessageType { - return msgTypeAccess -} diff --git a/packages/chainrunner/accessmanager/dist/.gitignore b/packages/chains/dist/.gitignore similarity index 100% rename from packages/chainrunner/accessmanager/dist/.gitignore rename to packages/chains/dist/.gitignore diff --git a/packages/chainrunner/accessmanager/dist/Makefile b/packages/chains/dist/Makefile similarity index 100% rename from packages/chainrunner/accessmanager/dist/Makefile rename to packages/chains/dist/Makefile diff --git a/packages/chainrunner/accessmanager/dist/WaspChainAccessNodes.png b/packages/chains/dist/WaspChainAccessNodes.png similarity index 100% rename from packages/chainrunner/accessmanager/dist/WaspChainAccessNodes.png rename to packages/chains/dist/WaspChainAccessNodes.png diff --git a/packages/chainrunner/accessmanager/dist/WaspChainAccessNodes.xopp b/packages/chains/dist/WaspChainAccessNodes.xopp similarity index 100% rename from packages/chainrunner/accessmanager/dist/WaspChainAccessNodes.xopp rename to packages/chains/dist/WaspChainAccessNodes.xopp diff --git a/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4.tla b/packages/chains/dist/WaspChainAccessNodesV4.tla similarity index 100% rename from packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4.tla rename to packages/chains/dist/WaspChainAccessNodesV4.tla diff --git a/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg b/packages/chains/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg similarity index 100% rename from packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg rename to packages/chains/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg diff --git a/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg b/packages/chains/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg similarity index 100% rename from packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg rename to packages/chains/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg diff --git a/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg b/packages/chains/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg similarity index 100% rename from packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg rename to packages/chains/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg diff --git a/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg b/packages/chains/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg similarity index 100% rename from packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg rename to packages/chains/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg diff --git a/packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg b/packages/chains/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg similarity index 100% rename from packages/chainrunner/accessmanager/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg rename to packages/chains/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg diff --git a/packages/chainrunner/accessmanager/dist/access_manager_dist.go b/packages/chains/dist/access_manager_dist.go similarity index 59% rename from packages/chainrunner/accessmanager/dist/access_manager_dist.go rename to packages/chains/dist/access_manager_dist.go index efc51c9bad..bbaa6ceeb5 100644 --- a/packages/chainrunner/accessmanager/dist/access_manager_dist.go +++ b/packages/chains/dist/access_manager_dist.go @@ -19,6 +19,8 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" + "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/util" ) type AccessMgr interface { @@ -26,15 +28,15 @@ type AccessMgr interface { } type Output interface { - ChainServerNodes() []*cryptolib.PublicKey + ChainServerNodes(chainID isc.ChainID) []*cryptolib.PublicKey } type accessMgrDist struct { - nodes *shrinkingmap.ShrinkingMap[gpa.NodeID, *accessMgrNode] // State for each peer. - chain *accessMgrChain // State of chain. - pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID // Convert PubKeys to NodeIDs. - serversUpdatedCB func([]*cryptolib.PublicKey) // Called when a set of servers has changed for a chain. - dismissPeerCB func(*cryptolib.PublicKey) // To stop redelivery at the upper layer. + nodes *shrinkingmap.ShrinkingMap[gpa.NodeID, *accessMgrNode] // State for each peer. + chains *shrinkingmap.ShrinkingMap[isc.ChainID, *accessMgrChain] // State for each chain. + pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID // Convert PubKeys to NodeIDs. + serversUpdatedCB func(isc.ChainID, []*cryptolib.PublicKey) // Called when a set of servers has changed for a chain. + dismissPeerCB func(*cryptolib.PublicKey) // To stop redelivery at the upper layer. log log.Logger } @@ -42,12 +44,13 @@ var _ gpa.GPA = &accessMgrDist{} func NewAccessMgr( pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID, - serversUpdatedCB func(servers []*cryptolib.PublicKey), + serversUpdatedCB func(chainID isc.ChainID, servers []*cryptolib.PublicKey), dismissPeerCB func(*cryptolib.PublicKey), log log.Logger, ) AccessMgr { return &accessMgrDist{ nodes: shrinkingmap.New[gpa.NodeID, *accessMgrNode](), + chains: shrinkingmap.New[isc.ChainID, *accessMgrChain](), pubKeyToNodeID: pubKeyToNodeID, serversUpdatedCB: serversUpdatedCB, dismissPeerCB: dismissPeerCB, @@ -61,9 +64,9 @@ func (amd *accessMgrDist) AsGPA() gpa.GPA { } // Implements the Output interface. -func (amd *accessMgrDist) ChainServerNodes() []*cryptolib.PublicKey { - if amd.chain != nil { - return amd.chain.server.Values() +func (amd *accessMgrDist) ChainServerNodes(chainID isc.ChainID) []*cryptolib.PublicKey { + if chain, exists := amd.chains.Get(chainID); exists { + return chain.server.Values() } return []*cryptolib.PublicKey{} } @@ -96,19 +99,20 @@ func (amd *accessMgrDist) Output() gpa.Output { // Implements the gpa.GPA interface. func (amd *accessMgrDist) StatusString() string { - return fmt.Sprintf("{accessMgr, |nodes|=%v, |hasChain|=%v}", amd.nodes.Size(), amd.chain != nil) + return fmt.Sprintf("{accessMgr, |nodes|=%v, |chains|=%v}", amd.nodes.Size(), amd.chains.Size()) } // > Notify all the trusted access nodes, that we will not serve the requests anymore. func (amd *accessMgrDist) handleInputChainDisabled(input *inputChainDisabled) gpa.OutMessages { - if amd.chain == nil { + chain, exists := amd.chains.Get(input.chainID) + if !exists { return nil // Already disabled. } - amd.chain.Disabled() - amd.chain = nil + chain.Disabled() + amd.chains.Delete(input.chainID) msgs := gpa.NoMessages() amd.nodes.ForEach(func(_ gpa.NodeID, node *accessMgrNode) bool { - msgs.AddAll(node.SetChainAccess(false)) + msgs.AddAll(node.SetChainAccess(input.chainID, false)) return true }) return msgs @@ -121,22 +125,24 @@ func (amd *accessMgrDist) handleInputChainDisabled(input *inputChainDisabled) gp func (amd *accessMgrDist) handleInputAccessNodes(input *inputAccessNodes) gpa.OutMessages { // // Update the info from the chain perspective. - if amd.chain == nil { + chain, exists := amd.chains.Get(input.chainID) + if !exists { initialServers := []*cryptolib.PublicKey{} amd.nodes.ForEach(func(_ gpa.NodeID, node *accessMgrNode) bool { - if node.isServer { + if node.serverFor.Has(input.chainID) { initialServers = append(initialServers, node.pubKey) } return true }) - amd.chain = newAccessMgrChain(amd.pubKeyToNodeID, initialServers, amd.serversUpdatedCB, amd.log) + chain = newAccessMgrChain(input.chainID, amd.pubKeyToNodeID, initialServers, amd.serversUpdatedCB, amd.log) + amd.chains.Set(input.chainID, chain) } - amd.chain.AccessGrantedFor(input.accessNodes) + chain.AccessGrantedFor(input.accessNodes) // // Update the info for each node. msgs := gpa.NoMessages() amd.nodes.ForEach(func(nodeID gpa.NodeID, node *accessMgrNode) bool { - msgs.AddAll(node.SetChainAccess(amd.chain.IsAccessGrantedFor(nodeID))) + msgs.AddAll(node.SetChainAccess(input.chainID, chain.IsAccessGrantedFor(nodeID))) return true }) return msgs @@ -153,11 +159,14 @@ func (amd *accessMgrDist) handleInputTrustedNodes(input *inputTrustedNodes) gpa. if amd.nodes.Has(trustedNodeID) { continue } - hasAccess := false - if amd.chain != nil && amd.chain.IsAccessGrantedFor(trustedNodeID) { - hasAccess = true - } - trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, hasAccess) + accessFor := newChainSet() + amd.chains.ForEach(func(chainID isc.ChainID, chain *accessMgrChain) bool { + if chain.IsAccessGrantedFor(trustedNodeID) { + accessFor.Add(chainID) + } + return true + }) + trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, accessFor) msgs.AddAll(trustedNodeMsgs) amd.nodes.Set(trustedNodeID, trustedNode) } @@ -167,10 +176,11 @@ func (amd *accessMgrDist) handleInputTrustedNodes(input *inputTrustedNodes) gpa. if _, ok := trustedIndex[nodeID]; ok { return true } - if amd.chain != nil { - amd.chain.MarkAsServerFor(node.pubKey, false) - msgs.AddAll(node.SetChainAccess(false)) - } + amd.chains.ForEach(func(_ isc.ChainID, chain *accessMgrChain) bool { + chain.MarkAsServerFor(node.pubKey, false) + msgs.AddAll(node.SetChainAccess(chain.chainID, false)) + return true + }) amd.nodes.Delete(nodeID) amd.dismissPeerCB(node.pubKey) return true @@ -185,9 +195,10 @@ func (amd *accessMgrDist) handleMsgAccess(msg *msgAccess) gpa.OutMessages { } msgs := node.handleMsgAccess(msg) - if amd.chain != nil { - amd.chain.MarkAsServerFor(node.pubKey, node.isServer) - } + amd.chains.ForEach(func(chainID isc.ChainID, chain *accessMgrChain) bool { + chain.MarkAsServerFor(node.pubKey, node.serverFor.Has(chainID)) + return true + }) return msgs } @@ -195,20 +206,23 @@ func (amd *accessMgrDist) handleMsgAccess(msg *msgAccess) gpa.OutMessages { //////////////////////////////////////////////////////////////////////////////// type accessMgrChain struct { + chainID isc.ChainID access map[gpa.NodeID]*cryptolib.PublicKey server *shrinkingmap.ShrinkingMap[gpa.NodeID, *cryptolib.PublicKey] pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID - serversUpdatedCB func([]*cryptolib.PublicKey) + serversUpdatedCB func(isc.ChainID, []*cryptolib.PublicKey) log log.Logger } func newAccessMgrChain( + chainID isc.ChainID, pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID, initialServers []*cryptolib.PublicKey, - serversUpdatedCB func([]*cryptolib.PublicKey), + serversUpdatedCB func(isc.ChainID, []*cryptolib.PublicKey), log log.Logger, ) *accessMgrChain { amc := &accessMgrChain{ + chainID: chainID, access: map[gpa.NodeID]*cryptolib.PublicKey{}, server: shrinkingmap.New[gpa.NodeID, *cryptolib.PublicKey](), pubKeyToNodeID: pubKeyToNodeID, @@ -221,8 +235,8 @@ func newAccessMgrChain( } serverNodes := amc.server.Values() - amc.log.LogDebugf("Chain server nodes updated to %+v on init.", serverNodes) - amc.serversUpdatedCB(serverNodes) + amc.log.LogDebugf("Chain %v server nodes updated to %+v on init.", amc.chainID.ShortString(), serverNodes) + amc.serversUpdatedCB(amc.chainID, serverNodes) return amc } @@ -244,8 +258,8 @@ func (amc *accessMgrChain) MarkAsServerFor(nodePubKey *cryptolib.PublicKey, gran } if wasServer != granted { serverNodes := amc.server.Values() - amc.log.LogDebugf("Chain server nodes updated to %+v.", serverNodes) - amc.serversUpdatedCB(serverNodes) + amc.log.LogDebugf("Chain %v server nodes updated to %+v.", amc.chainID.ShortString(), serverNodes) + amc.serversUpdatedCB(amc.chainID, serverNodes) } } @@ -258,8 +272,8 @@ func (amc *accessMgrChain) Disabled() { if amc.server.Size() == 0 { return } - amc.log.LogDebugf("Chain server nodes updated to [] on dismiss.") - amc.serversUpdatedCB([]*cryptolib.PublicKey{}) + amc.log.LogDebugf("Chain %v server nodes updated to [] on dismiss.", amc.chainID.ShortString()) + amc.serversUpdatedCB(amc.chainID, []*cryptolib.PublicKey{}) } //////////////////////////////////////////////////////////////////////////////// @@ -269,81 +283,83 @@ type accessMgrNode struct { pubKey *cryptolib.PublicKey ourLC int peerLC int - hasAccess bool - isServer bool + accessFor *chainSet + serverFor *chainSet } func newAccessMgrNode( nodeID gpa.NodeID, pubKey *cryptolib.PublicKey, - hasAccess bool, + accessFor *chainSet, ) (*accessMgrNode, gpa.OutMessages) { amn := &accessMgrNode{ nodeID: nodeID, pubKey: pubKey, ourLC: 1, peerLC: 0, - hasAccess: hasAccess, - isServer: false, + accessFor: accessFor, + serverFor: newChainSet(), } msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice())) return amn, msgs } -func (amn *accessMgrNode) SetChainAccess(access bool) gpa.OutMessages { +func (amn *accessMgrNode) SetChainAccess(chainID isc.ChainID, access bool) gpa.OutMessages { if access { - return amn.grantAccess() + return amn.grantAccess(chainID) } - return amn.revokeAccess() + return amn.revokeAccess(chainID) } -func (amn *accessMgrNode) grantAccess() gpa.OutMessages { - if amn.hasAccess { +func (amn *accessMgrNode) grantAccess(chainID isc.ChainID) gpa.OutMessages { + if amn.accessFor.Has(chainID) { return nil } - amn.hasAccess = true + amn.accessFor.Add(chainID) amn.ourLC++ msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice())) return msgs } -func (amn *accessMgrNode) revokeAccess() gpa.OutMessages { - if !amn.hasAccess { +func (amn *accessMgrNode) revokeAccess(chainID isc.ChainID) gpa.OutMessages { + if !amn.accessFor.Has(chainID) { return nil } - amn.hasAccess = false + amn.accessFor.Delete(chainID) amn.ourLC++ msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice())) return msgs } func (amn *accessMgrNode) handleMsgAccess(msg *msgAccess) gpa.OutMessages { // This has to be checked before updating the state. - // > IF /\ m.access = isServer(n, m.src) \* Peer's info hasn't changed, so we don't need to ack it. - // > /\ m.server = H(hasAccess(n, m.src)) \* Our info echoed, so that was an ack. + // > IF /\ m.access = serverForChains(n, m.src) \* Peer's info hasn't changed, so we don't need to ack it. + // > /\ m.server = H(accessForChains(n, m.src)) \* Our info echoed, so that was an ack. // > /\ m.src_lc >= lClock[n][m.src] \* Peer's clock is not outdated, we don't need to push it forward. // > /\ m.dst_lc <= lClock[n][n] \* And the echoed clock don't exceed our clock, so we don't need to push it. // > THEN sendAndAck(m, {}) // > ELSE sendAndAck(m, accessMsgs(n)) sendDone := true && - msg.hasAccess == amn.isServer && - msg.isServer == amn.hasAccess && + util.Same(msg.accessForChains, amn.serverFor.AsSlice()) && + util.Same(msg.serverForChains, amn.accessFor.AsSlice()) && msg.senderLClock >= amn.peerLC && msg.receiverLClock <= amn.ourLC // - // Update isServer and peerLC. + // Update serverFor and peerLC. if msg.senderLClock > amn.peerLC { - amn.isServer = msg.hasAccess + amn.serverFor.FromSlice(msg.accessForChains) amn.peerLC = msg.senderLClock } // // Update ourLC. if amn.ourLC <= msg.receiverLClock { amn.ourLC = msg.receiverLClock - if !amn.hasAccess == msg.isServer { + msgServerFor := newChainSet() + msgServerFor.FromSlice(msg.serverForChains) + if !amn.accessFor.Equals(msgServerFor) { amn.ourLC++ } } @@ -351,10 +367,58 @@ func (amn *accessMgrNode) handleMsgAccess(msg *msgAccess) gpa.OutMessages { // Send message back, if needed. if !sendDone { return gpa.NoMessages().Add( - newMsgAccess(msg.Sender(), amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer), + newMsgAccess(msg.Sender(), amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice()), ) } return nil } //////////////////////////////////////////////////////////////////////////////// + +type chainSet struct { + elements *shrinkingmap.ShrinkingMap[isc.ChainID, struct{}] +} + +func newChainSet() *chainSet { + return &chainSet{elements: shrinkingmap.New[isc.ChainID, struct{}]()} +} + +func (cs *chainSet) Add(elem isc.ChainID) { + cs.elements.Set(elem, struct{}{}) +} + +func (cs *chainSet) Delete(elem isc.ChainID) { + cs.elements.Delete(elem) +} + +func (cs *chainSet) Has(elem isc.ChainID) bool { + return cs.elements.Has(elem) +} + +func (cs *chainSet) AsSlice() []isc.ChainID { + return cs.elements.Keys() +} + +func (cs *chainSet) FromSlice(els []isc.ChainID) { + cs.elements = shrinkingmap.New[isc.ChainID, struct{}]() + for _, el := range els { + cs.elements.Set(el, struct{}{}) + } +} + +func (cs *chainSet) Equals(other *chainSet) bool { + if cs.elements.Size() != other.elements.Size() { + return false + } + + equal := true + cs.elements.ForEach(func(ci isc.ChainID, s struct{}) bool { + if !other.elements.Has(ci) { + equal = false + return false + } + return true + }) + + return equal +} diff --git a/packages/chainrunner/accessmanager/dist/access_manager_dist_test.go b/packages/chains/dist/access_manager_dist_test.go similarity index 81% rename from packages/chainrunner/accessmanager/dist/access_manager_dist_test.go rename to packages/chains/dist/access_manager_dist_test.go index 5bae4106c3..030e34500d 100644 --- a/packages/chainrunner/accessmanager/dist/access_manager_dist_test.go +++ b/packages/chains/dist/access_manager_dist_test.go @@ -9,9 +9,11 @@ import ( "github.com/stretchr/testify/require" - "github.com/iotaledger/wasp/v2/packages/chainrunner/accessmanager/dist" + "github.com/iotaledger/wasp/v2/packages/chains/accessmanager/dist" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" + "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" "github.com/iotaledger/wasp/v2/packages/testutil/testpeers" "github.com/iotaledger/wasp/v2/packages/util" @@ -28,6 +30,7 @@ func testBasic(t *testing.T, n int) { _, peerIdentities := testpeers.SetupKeys(uint16(n)) nodePubs := testpeers.PublicKeys(peerIdentities) nodeIDs := gpa.NodeIDsFromPublicKeys(nodePubs) + chainID := isctest.RandomChainID() servers := map[gpa.NodeID][]*cryptolib.PublicKey{} nodes := map[gpa.NodeID]gpa.GPA{} @@ -35,7 +38,7 @@ func testBasic(t *testing.T, n int) { nidCopy := nid nodes[nid] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, - func(pks []*cryptolib.PublicKey) { + func(ci isc.ChainID, pks []*cryptolib.PublicKey) { servers[nidCopy] = pks }, func(pk *cryptolib.PublicKey) {}, @@ -46,7 +49,7 @@ func testBasic(t *testing.T, n int) { tc := gpa.NewTestContext(nodes) for _, nid := range nodeIDs { tc.WithInput(nid, dist.NewInputTrustedNodes(nodePubs)) - tc.WithInput(nid, dist.NewInputAccessNodes(nodePubs)) + tc.WithInput(nid, dist.NewInputAccessNodes(chainID, nodePubs)) } tc.RunAll() for nid := range nodes { diff --git a/packages/chainrunner/accessmanager/dist/access_manager_rapid_test.go b/packages/chains/dist/access_manager_rapid_test.go similarity index 53% rename from packages/chainrunner/accessmanager/dist/access_manager_rapid_test.go rename to packages/chains/dist/access_manager_rapid_test.go index 98c558fdde..44b46d6b68 100644 --- a/packages/chainrunner/accessmanager/dist/access_manager_rapid_test.go +++ b/packages/chains/dist/access_manager_rapid_test.go @@ -12,9 +12,11 @@ import ( "pgregory.net/rapid" "github.com/iotaledger/hive.go/log" - "github.com/iotaledger/wasp/v2/packages/chainrunner/accessmanager/dist" + "github.com/iotaledger/wasp/v2/packages/chains/accessmanager/dist" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" + "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" "github.com/iotaledger/wasp/v2/packages/testutil/testpeers" "github.com/iotaledger/wasp/v2/packages/util" @@ -28,49 +30,59 @@ type accessMgrSM struct { nodeKeys []*cryptolib.KeyPair nodePubs []*cryptolib.PublicKey nodeIDs []gpa.NodeID + chainIDs []isc.ChainID genNodeID *rapid.Generator[gpa.NodeID] genNodePub *rapid.Generator[*cryptolib.PublicKey] genNodePubSlice *rapid.Generator[[]*cryptolib.PublicKey] + genChainID *rapid.Generator[isc.ChainID] // // These are set up for each scenario. tc *gpa.TestContext nodes map[gpa.NodeID]gpa.GPA - servers map[gpa.NodeID][]*cryptolib.PublicKey + servers map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey // // Model. mTrusted map[gpa.NodeID][]*cryptolib.PublicKey - mActive map[gpa.NodeID]bool - mAccess map[gpa.NodeID][]*cryptolib.PublicKey + mActive map[gpa.NodeID]map[isc.ChainID]bool + mAccess map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey } var _ rapid.StateMachine = &accessMgrSM{} -func newAccessMgrSM(t *rapid.T, nodeCount int) *accessMgrSM { +func newAccessMgrSM(t *rapid.T, nodeCount, chainCount int) *accessMgrSM { sm := new(accessMgrSM) if !sm.initialized { sm.log = testlogger.NewLogger(t) _, sm.nodeKeys = testpeers.SetupKeys(uint16(nodeCount)) sm.nodePubs = testpeers.PublicKeys(sm.nodeKeys) sm.nodeIDs = gpa.NodeIDsFromPublicKeys(sm.nodePubs) + sm.chainIDs = make([]isc.ChainID, chainCount) + for i := range sm.chainIDs { + sm.chainIDs[i] = isctest.RandomChainID([]byte{byte(i)}) + } sm.genNodeID = rapid.SampledFrom(sm.nodeIDs) sm.genNodePub = rapid.SampledFrom(sm.nodePubs) sm.genNodePubSlice = rapid.SliceOfDistinct( sm.genNodePub, func(pub *cryptolib.PublicKey) cryptolib.PublicKeyKey { return pub.AsKey() }, ) + sm.genChainID = rapid.SampledFrom(sm.chainIDs) sm.initialized = true } - sm.servers = map[gpa.NodeID][]*cryptolib.PublicKey{} + sm.servers = map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey{} sm.nodes = map[gpa.NodeID]gpa.GPA{} for _, nid := range sm.nodeIDs { - sm.servers[nid] = []*cryptolib.PublicKey{} + sm.servers[nid] = map[isc.ChainID][]*cryptolib.PublicKey{} + for _, chainID := range sm.chainIDs { + sm.servers[nid][chainID] = []*cryptolib.PublicKey{} + } nidCopy := nid sm.nodes[nid] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, - func(servers []*cryptolib.PublicKey) { - t.Logf("serversUpdatedCB: nodeID=%v, servers=%v", nidCopy, servers) - sm.servers[nidCopy] = servers + func(chainID isc.ChainID, servers []*cryptolib.PublicKey) { + t.Logf("serversUpdatedCB: nodeID=%v, chainID=%v, servers=%v", nidCopy, chainID, servers) + sm.servers[nidCopy][chainID] = servers }, func(pk *cryptolib.PublicKey) {}, sm.log.NewChildLogger(nid.ShortString()), @@ -79,13 +91,16 @@ func newAccessMgrSM(t *rapid.T, nodeCount int) *accessMgrSM { sm.tc = gpa.NewTestContext(sm.nodes) sm.mTrusted = map[gpa.NodeID][]*cryptolib.PublicKey{} - sm.mActive = map[gpa.NodeID]bool{} - sm.mAccess = map[gpa.NodeID][]*cryptolib.PublicKey{} + sm.mActive = map[gpa.NodeID]map[isc.ChainID]bool{} + sm.mAccess = map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey{} for _, nid := range sm.nodeIDs { sm.mTrusted[nid] = []*cryptolib.PublicKey{} - sm.mAccess[nid] = []*cryptolib.PublicKey{} - sm.mAccess[nid] = []*cryptolib.PublicKey{} - sm.mActive[nid] = false + sm.mAccess[nid] = map[isc.ChainID][]*cryptolib.PublicKey{} + sm.mActive[nid] = map[isc.ChainID]bool{} + for _, ch := range sm.chainIDs { + sm.mAccess[nid][ch] = []*cryptolib.PublicKey{} + sm.mActive[nid][ch] = false + } } return sm } @@ -99,16 +114,18 @@ func (sm *accessMgrSM) InputTrustedNodes(t *rapid.T) { func (sm *accessMgrSM) InputAccessNodes(t *rapid.T) { nodeID := sm.genNodeID.Draw(t, "nodeID") + chainID := sm.genChainID.Draw(t, "chainID") accessNodes := sm.genNodePubSlice.Draw(t, "accessNodes") - sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(accessNodes)).RunAll() - sm.mActive[nodeID] = true - sm.mAccess[nodeID] = accessNodes + sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(chainID, accessNodes)).RunAll() + sm.mActive[nodeID][chainID] = true + sm.mAccess[nodeID][chainID] = accessNodes } func (sm *accessMgrSM) InputChainDisabled(t *rapid.T) { nodeID := sm.genNodeID.Draw(t, "nodeID") - sm.tc.WithInput(nodeID, dist.NewInputChainDisabled()).RunAll() - sm.mActive[nodeID] = false + chainID := sm.genChainID.Draw(t, "chainID") + sm.tc.WithInput(nodeID, dist.NewInputChainDisabled(chainID)).RunAll() + sm.mActive[nodeID][chainID] = false } func (sm *accessMgrSM) Reboot(t *rapid.T) { @@ -117,9 +134,9 @@ func (sm *accessMgrSM) Reboot(t *rapid.T) { // Just recreate a node. sm.nodes[nodeID] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, - func(servers []*cryptolib.PublicKey) { - t.Logf("serversUpdatedCB: nodeID=%v, servers=%v", nodeID, servers) - sm.servers[nodeID] = servers + func(chainID isc.ChainID, servers []*cryptolib.PublicKey) { + t.Logf("serversUpdatedCB: nodeID=%v, chainID=%v, servers=%v", nodeID, chainID, servers) + sm.servers[nodeID][chainID] = servers }, func(pk *cryptolib.PublicKey) {}, sm.log.NewChildLogger(nodeID.ShortString()), @@ -128,8 +145,11 @@ func (sm *accessMgrSM) Reboot(t *rapid.T) { // Re-initialize all the persistent info: access information, active chains, trusted nodes. // But the servers are not restored here. The algorithm has to restore that. sm.tc.WithInput(nodeID, dist.NewInputTrustedNodes(sm.mTrusted[nodeID])) - if sm.mActive[nodeID] { - sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(sm.mAccess[nodeID])) + for _, chainID := range sm.chainIDs { + if !sm.mActive[nodeID][chainID] { + continue + } + sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(chainID, sm.mAccess[nodeID][chainID])) } sm.tc.RunAll() } @@ -137,22 +157,24 @@ func (sm *accessMgrSM) Reboot(t *rapid.T) { func (sm *accessMgrSM) Check(t *rapid.T) { for _, nodePub := range sm.nodePubs { nodeID := gpa.NodeIDFromPublicKey(nodePub) - shouldBeServers := []*cryptolib.PublicKey{} - for _, peerPub := range sm.nodePubs { - peerID := gpa.NodeIDFromPublicKey(peerPub) - if sm.mActive[nodeID] && - sm.mActive[peerID] && - lo.Contains(sm.mTrusted[peerID], nodePub) && - lo.Contains(sm.mTrusted[nodeID], peerPub) && - lo.Contains(sm.mAccess[peerID], nodePub) { - shouldBeServers = append(shouldBeServers, peerPub) + for _, chainID := range sm.chainIDs { + shouldBeServers := []*cryptolib.PublicKey{} + for _, peerPub := range sm.nodePubs { + peerID := gpa.NodeIDFromPublicKey(peerPub) + if sm.mActive[nodeID][chainID] && + sm.mActive[peerID][chainID] && + lo.Contains(sm.mTrusted[peerID], nodePub) && + lo.Contains(sm.mTrusted[nodeID], peerPub) && + lo.Contains(sm.mAccess[peerID][chainID], nodePub) { + shouldBeServers = append(shouldBeServers, peerPub) + } } + require.True(t, + util.Same(sm.servers[nodeID][chainID], shouldBeServers), + "nodeID=%v, chainID=%v, have=%v, expect=%v", + nodeID, chainID, sm.servers[nodeID][chainID], shouldBeServers, + ) } - require.True(t, - util.Same(sm.servers[nodeID], shouldBeServers), - "nodeID=%v, chainID=%v, have=%v, expect=%v", - nodeID, sm.servers[nodeID], shouldBeServers, - ) } } @@ -161,14 +183,15 @@ func (sm *accessMgrSM) Check(t *rapid.T) { func TestAccessMgrRapid(t *testing.T) { tests := []struct { n int + c int }{ - {n: 1}, - {n: 2}, - {n: 4}, + {n: 1, c: 1}, + {n: 2, c: 1}, + {n: 4, c: 3}, } for _, test := range tests { - t.Run(fmt.Sprintf("N%d", test.n), rapid.MakeCheck(func(t *rapid.T) { - sm := newAccessMgrSM(t, test.n) + t.Run(fmt.Sprintf("N%d C%d", test.n, test.c), rapid.MakeCheck(func(t *rapid.T) { + sm := newAccessMgrSM(t, test.n, test.c) t.Repeat(rapid.StateMachineActions(sm)) })) } diff --git a/packages/chainrunner/accessmanager/dist/input_access_nodes.go b/packages/chains/dist/input_access_nodes.go similarity index 56% rename from packages/chainrunner/accessmanager/dist/input_access_nodes.go rename to packages/chains/dist/input_access_nodes.go index 4c9f03ede5..f0f8d92a33 100644 --- a/packages/chainrunner/accessmanager/dist/input_access_nodes.go +++ b/packages/chains/dist/input_access_nodes.go @@ -6,14 +6,16 @@ package dist import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" + "github.com/iotaledger/wasp/v2/packages/isc" ) type inputAccessNodes struct { + chainID isc.ChainID accessNodes []*cryptolib.PublicKey } var _ gpa.Input = &inputAccessNodes{} -func NewInputAccessNodes(accessNodes []*cryptolib.PublicKey) gpa.Input { - return &inputAccessNodes{accessNodes: accessNodes} +func NewInputAccessNodes(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey) gpa.Input { + return &inputAccessNodes{chainID: chainID, accessNodes: accessNodes} } diff --git a/packages/chains/dist/input_chain_disabled.go b/packages/chains/dist/input_chain_disabled.go new file mode 100644 index 0000000000..bcd9ff432c --- /dev/null +++ b/packages/chains/dist/input_chain_disabled.go @@ -0,0 +1,14 @@ +package dist + +import ( + "github.com/iotaledger/wasp/v2/packages/gpa" + "github.com/iotaledger/wasp/v2/packages/isc" +) + +type inputChainDisabled struct { + chainID isc.ChainID +} + +func NewInputChainDisabled(chainID isc.ChainID) gpa.Input { + return &inputChainDisabled{chainID: chainID} +} diff --git a/packages/chainrunner/accessmanager/dist/input_trusted_nodes.go b/packages/chains/dist/input_trusted_nodes.go similarity index 100% rename from packages/chainrunner/accessmanager/dist/input_trusted_nodes.go rename to packages/chains/dist/input_trusted_nodes.go diff --git a/packages/chainrunner/accessmanager/dist/msg.go b/packages/chains/dist/msg.go similarity index 100% rename from packages/chainrunner/accessmanager/dist/msg.go rename to packages/chains/dist/msg.go diff --git a/packages/chains/dist/msg_access.go b/packages/chains/dist/msg_access.go new file mode 100644 index 0000000000..e68274e437 --- /dev/null +++ b/packages/chains/dist/msg_access.go @@ -0,0 +1,39 @@ +// Copyright 2020 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +package dist + +import ( + "github.com/iotaledger/wasp/v2/packages/gpa" + "github.com/iotaledger/wasp/v2/packages/isc" +) + +// Send by a node which has a chain enabled to a node it considers an access node. +type msgAccess struct { + gpa.BasicMessage + senderLClock int `bcs:"export,type=u32"` + receiverLClock int `bcs:"export,type=u32"` + accessForChains []isc.ChainID `bcs:"export,len_bytes=2"` + serverForChains []isc.ChainID `bcs:"export,len_bytes=2"` +} + +var _ gpa.Message = new(msgAccess) + +func newMsgAccess( + recipient gpa.NodeID, + senderLClock, receiverLClock int, + accessForChains []isc.ChainID, + serverForChains []isc.ChainID, +) gpa.Message { + return &msgAccess{ + BasicMessage: gpa.NewBasicMessage(recipient), + senderLClock: senderLClock, + receiverLClock: receiverLClock, + accessForChains: accessForChains, + serverForChains: serverForChains, + } +} + +func (msg *msgAccess) MsgType() gpa.MessageType { + return msgTypeAccess +} diff --git a/packages/chainrunner/accessmanager/dist/msg_access_test.go b/packages/chains/dist/msg_access_test.go similarity index 57% rename from packages/chainrunner/accessmanager/dist/msg_access_test.go rename to packages/chains/dist/msg_access_test.go index d18b223546..e1d0318528 100644 --- a/packages/chainrunner/accessmanager/dist/msg_access_test.go +++ b/packages/chains/dist/msg_access_test.go @@ -10,6 +10,8 @@ import ( bcs "github.com/iotaledger/bcs-go" "github.com/iotaledger/wasp/v2/packages/gpa" + "github.com/iotaledger/wasp/v2/packages/isc" + "github.com/iotaledger/wasp/v2/packages/isc/isctest" ) func TestMsgAccessSerialization(t *testing.T) { @@ -17,8 +19,8 @@ func TestMsgAccessSerialization(t *testing.T) { gpa.BasicMessage{}, rand.Intn(math.MaxUint32 + 1), rand.Intn(math.MaxUint32 + 1), - true, - true, + []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, + []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, } bcs.TestCodec(t, msg) @@ -27,8 +29,8 @@ func TestMsgAccessSerialization(t *testing.T) { gpa.BasicMessage{}, math.MaxUint32, math.MaxUint32, - true, - true, + []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, + []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, } bcs.TestCodec(t, msg) From c3e5738a461d302449baf4b5248514c9fdcb18ef Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Wed, 20 Aug 2025 07:12:20 -0700 Subject: [PATCH 19/27] Moving accessmgr dist folder --- packages/{chains => chainrunner}/dist/.gitignore | 0 packages/{chains => chainrunner}/dist/Makefile | 0 .../dist/WaspChainAccessNodes.png | Bin .../dist/WaspChainAccessNodes.xopp | Bin .../dist/WaspChainAccessNodesV4.tla | 0 .../dist/WaspChainAccessNodesV4_N2C1L3R0.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L3R1.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L4R0.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L4R1.cfg | 0 .../dist/WaspChainAccessNodesV4_N2C1L5R0.cfg | 0 .../dist/access_manager_dist.go | 0 .../dist/access_manager_dist_test.go | 0 .../dist/access_manager_rapid_test.go | 0 .../dist/input_access_nodes.go | 0 .../dist/input_chain_disabled.go | 0 .../dist/input_trusted_nodes.go | 0 packages/{chains => chainrunner}/dist/msg.go | 0 packages/{chains => chainrunner}/dist/msg_access.go | 0 .../{chains => chainrunner}/dist/msg_access_test.go | 0 19 files changed, 0 insertions(+), 0 deletions(-) rename packages/{chains => chainrunner}/dist/.gitignore (100%) rename packages/{chains => chainrunner}/dist/Makefile (100%) rename packages/{chains => chainrunner}/dist/WaspChainAccessNodes.png (100%) rename packages/{chains => chainrunner}/dist/WaspChainAccessNodes.xopp (100%) rename packages/{chains => chainrunner}/dist/WaspChainAccessNodesV4.tla (100%) rename packages/{chains => chainrunner}/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg (100%) rename packages/{chains => chainrunner}/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg (100%) rename packages/{chains => chainrunner}/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg (100%) rename packages/{chains => chainrunner}/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg (100%) rename packages/{chains => chainrunner}/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg (100%) rename packages/{chains => chainrunner}/dist/access_manager_dist.go (100%) rename packages/{chains => chainrunner}/dist/access_manager_dist_test.go (100%) rename packages/{chains => chainrunner}/dist/access_manager_rapid_test.go (100%) rename packages/{chains => chainrunner}/dist/input_access_nodes.go (100%) rename packages/{chains => chainrunner}/dist/input_chain_disabled.go (100%) rename packages/{chains => chainrunner}/dist/input_trusted_nodes.go (100%) rename packages/{chains => chainrunner}/dist/msg.go (100%) rename packages/{chains => chainrunner}/dist/msg_access.go (100%) rename packages/{chains => chainrunner}/dist/msg_access_test.go (100%) diff --git a/packages/chains/dist/.gitignore b/packages/chainrunner/dist/.gitignore similarity index 100% rename from packages/chains/dist/.gitignore rename to packages/chainrunner/dist/.gitignore diff --git a/packages/chains/dist/Makefile b/packages/chainrunner/dist/Makefile similarity index 100% rename from packages/chains/dist/Makefile rename to packages/chainrunner/dist/Makefile diff --git a/packages/chains/dist/WaspChainAccessNodes.png b/packages/chainrunner/dist/WaspChainAccessNodes.png similarity index 100% rename from packages/chains/dist/WaspChainAccessNodes.png rename to packages/chainrunner/dist/WaspChainAccessNodes.png diff --git a/packages/chains/dist/WaspChainAccessNodes.xopp b/packages/chainrunner/dist/WaspChainAccessNodes.xopp similarity index 100% rename from packages/chains/dist/WaspChainAccessNodes.xopp rename to packages/chainrunner/dist/WaspChainAccessNodes.xopp diff --git a/packages/chains/dist/WaspChainAccessNodesV4.tla b/packages/chainrunner/dist/WaspChainAccessNodesV4.tla similarity index 100% rename from packages/chains/dist/WaspChainAccessNodesV4.tla rename to packages/chainrunner/dist/WaspChainAccessNodesV4.tla diff --git a/packages/chains/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg b/packages/chainrunner/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg similarity index 100% rename from packages/chains/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg rename to packages/chainrunner/dist/WaspChainAccessNodesV4_N2C1L3R0.cfg diff --git a/packages/chains/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg b/packages/chainrunner/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg similarity index 100% rename from packages/chains/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg rename to packages/chainrunner/dist/WaspChainAccessNodesV4_N2C1L3R1.cfg diff --git a/packages/chains/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg b/packages/chainrunner/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg similarity index 100% rename from packages/chains/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg rename to packages/chainrunner/dist/WaspChainAccessNodesV4_N2C1L4R0.cfg diff --git a/packages/chains/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg b/packages/chainrunner/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg similarity index 100% rename from packages/chains/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg rename to packages/chainrunner/dist/WaspChainAccessNodesV4_N2C1L4R1.cfg diff --git a/packages/chains/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg b/packages/chainrunner/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg similarity index 100% rename from packages/chains/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg rename to packages/chainrunner/dist/WaspChainAccessNodesV4_N2C1L5R0.cfg diff --git a/packages/chains/dist/access_manager_dist.go b/packages/chainrunner/dist/access_manager_dist.go similarity index 100% rename from packages/chains/dist/access_manager_dist.go rename to packages/chainrunner/dist/access_manager_dist.go diff --git a/packages/chains/dist/access_manager_dist_test.go b/packages/chainrunner/dist/access_manager_dist_test.go similarity index 100% rename from packages/chains/dist/access_manager_dist_test.go rename to packages/chainrunner/dist/access_manager_dist_test.go diff --git a/packages/chains/dist/access_manager_rapid_test.go b/packages/chainrunner/dist/access_manager_rapid_test.go similarity index 100% rename from packages/chains/dist/access_manager_rapid_test.go rename to packages/chainrunner/dist/access_manager_rapid_test.go diff --git a/packages/chains/dist/input_access_nodes.go b/packages/chainrunner/dist/input_access_nodes.go similarity index 100% rename from packages/chains/dist/input_access_nodes.go rename to packages/chainrunner/dist/input_access_nodes.go diff --git a/packages/chains/dist/input_chain_disabled.go b/packages/chainrunner/dist/input_chain_disabled.go similarity index 100% rename from packages/chains/dist/input_chain_disabled.go rename to packages/chainrunner/dist/input_chain_disabled.go diff --git a/packages/chains/dist/input_trusted_nodes.go b/packages/chainrunner/dist/input_trusted_nodes.go similarity index 100% rename from packages/chains/dist/input_trusted_nodes.go rename to packages/chainrunner/dist/input_trusted_nodes.go diff --git a/packages/chains/dist/msg.go b/packages/chainrunner/dist/msg.go similarity index 100% rename from packages/chains/dist/msg.go rename to packages/chainrunner/dist/msg.go diff --git a/packages/chains/dist/msg_access.go b/packages/chainrunner/dist/msg_access.go similarity index 100% rename from packages/chains/dist/msg_access.go rename to packages/chainrunner/dist/msg_access.go diff --git a/packages/chains/dist/msg_access_test.go b/packages/chainrunner/dist/msg_access_test.go similarity index 100% rename from packages/chains/dist/msg_access_test.go rename to packages/chainrunner/dist/msg_access_test.go From 4eb2df70b5fdcd1ef95253ae8f9b9492415853fd Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Wed, 20 Aug 2025 07:13:43 -0700 Subject: [PATCH 20/27] Changes to accessmgr dist files --- .../chainrunner/dist/access_manager_dist.go | 194 ++++++------------ .../dist/access_manager_dist_test.go | 9 +- .../dist/access_manager_rapid_test.go | 111 ++++------ .../chainrunner/dist/input_access_nodes.go | 6 +- .../chainrunner/dist/input_chain_disabled.go | 9 +- packages/chainrunner/dist/msg_access.go | 23 +-- packages/chainrunner/dist/msg_access_test.go | 10 +- 7 files changed, 132 insertions(+), 230 deletions(-) diff --git a/packages/chainrunner/dist/access_manager_dist.go b/packages/chainrunner/dist/access_manager_dist.go index bbaa6ceeb5..efc51c9bad 100644 --- a/packages/chainrunner/dist/access_manager_dist.go +++ b/packages/chainrunner/dist/access_manager_dist.go @@ -19,8 +19,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/util" ) type AccessMgr interface { @@ -28,15 +26,15 @@ type AccessMgr interface { } type Output interface { - ChainServerNodes(chainID isc.ChainID) []*cryptolib.PublicKey + ChainServerNodes() []*cryptolib.PublicKey } type accessMgrDist struct { - nodes *shrinkingmap.ShrinkingMap[gpa.NodeID, *accessMgrNode] // State for each peer. - chains *shrinkingmap.ShrinkingMap[isc.ChainID, *accessMgrChain] // State for each chain. - pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID // Convert PubKeys to NodeIDs. - serversUpdatedCB func(isc.ChainID, []*cryptolib.PublicKey) // Called when a set of servers has changed for a chain. - dismissPeerCB func(*cryptolib.PublicKey) // To stop redelivery at the upper layer. + nodes *shrinkingmap.ShrinkingMap[gpa.NodeID, *accessMgrNode] // State for each peer. + chain *accessMgrChain // State of chain. + pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID // Convert PubKeys to NodeIDs. + serversUpdatedCB func([]*cryptolib.PublicKey) // Called when a set of servers has changed for a chain. + dismissPeerCB func(*cryptolib.PublicKey) // To stop redelivery at the upper layer. log log.Logger } @@ -44,13 +42,12 @@ var _ gpa.GPA = &accessMgrDist{} func NewAccessMgr( pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID, - serversUpdatedCB func(chainID isc.ChainID, servers []*cryptolib.PublicKey), + serversUpdatedCB func(servers []*cryptolib.PublicKey), dismissPeerCB func(*cryptolib.PublicKey), log log.Logger, ) AccessMgr { return &accessMgrDist{ nodes: shrinkingmap.New[gpa.NodeID, *accessMgrNode](), - chains: shrinkingmap.New[isc.ChainID, *accessMgrChain](), pubKeyToNodeID: pubKeyToNodeID, serversUpdatedCB: serversUpdatedCB, dismissPeerCB: dismissPeerCB, @@ -64,9 +61,9 @@ func (amd *accessMgrDist) AsGPA() gpa.GPA { } // Implements the Output interface. -func (amd *accessMgrDist) ChainServerNodes(chainID isc.ChainID) []*cryptolib.PublicKey { - if chain, exists := amd.chains.Get(chainID); exists { - return chain.server.Values() +func (amd *accessMgrDist) ChainServerNodes() []*cryptolib.PublicKey { + if amd.chain != nil { + return amd.chain.server.Values() } return []*cryptolib.PublicKey{} } @@ -99,20 +96,19 @@ func (amd *accessMgrDist) Output() gpa.Output { // Implements the gpa.GPA interface. func (amd *accessMgrDist) StatusString() string { - return fmt.Sprintf("{accessMgr, |nodes|=%v, |chains|=%v}", amd.nodes.Size(), amd.chains.Size()) + return fmt.Sprintf("{accessMgr, |nodes|=%v, |hasChain|=%v}", amd.nodes.Size(), amd.chain != nil) } // > Notify all the trusted access nodes, that we will not serve the requests anymore. func (amd *accessMgrDist) handleInputChainDisabled(input *inputChainDisabled) gpa.OutMessages { - chain, exists := amd.chains.Get(input.chainID) - if !exists { + if amd.chain == nil { return nil // Already disabled. } - chain.Disabled() - amd.chains.Delete(input.chainID) + amd.chain.Disabled() + amd.chain = nil msgs := gpa.NoMessages() amd.nodes.ForEach(func(_ gpa.NodeID, node *accessMgrNode) bool { - msgs.AddAll(node.SetChainAccess(input.chainID, false)) + msgs.AddAll(node.SetChainAccess(false)) return true }) return msgs @@ -125,24 +121,22 @@ func (amd *accessMgrDist) handleInputChainDisabled(input *inputChainDisabled) gp func (amd *accessMgrDist) handleInputAccessNodes(input *inputAccessNodes) gpa.OutMessages { // // Update the info from the chain perspective. - chain, exists := amd.chains.Get(input.chainID) - if !exists { + if amd.chain == nil { initialServers := []*cryptolib.PublicKey{} amd.nodes.ForEach(func(_ gpa.NodeID, node *accessMgrNode) bool { - if node.serverFor.Has(input.chainID) { + if node.isServer { initialServers = append(initialServers, node.pubKey) } return true }) - chain = newAccessMgrChain(input.chainID, amd.pubKeyToNodeID, initialServers, amd.serversUpdatedCB, amd.log) - amd.chains.Set(input.chainID, chain) + amd.chain = newAccessMgrChain(amd.pubKeyToNodeID, initialServers, amd.serversUpdatedCB, amd.log) } - chain.AccessGrantedFor(input.accessNodes) + amd.chain.AccessGrantedFor(input.accessNodes) // // Update the info for each node. msgs := gpa.NoMessages() amd.nodes.ForEach(func(nodeID gpa.NodeID, node *accessMgrNode) bool { - msgs.AddAll(node.SetChainAccess(input.chainID, chain.IsAccessGrantedFor(nodeID))) + msgs.AddAll(node.SetChainAccess(amd.chain.IsAccessGrantedFor(nodeID))) return true }) return msgs @@ -159,14 +153,11 @@ func (amd *accessMgrDist) handleInputTrustedNodes(input *inputTrustedNodes) gpa. if amd.nodes.Has(trustedNodeID) { continue } - accessFor := newChainSet() - amd.chains.ForEach(func(chainID isc.ChainID, chain *accessMgrChain) bool { - if chain.IsAccessGrantedFor(trustedNodeID) { - accessFor.Add(chainID) - } - return true - }) - trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, accessFor) + hasAccess := false + if amd.chain != nil && amd.chain.IsAccessGrantedFor(trustedNodeID) { + hasAccess = true + } + trustedNode, trustedNodeMsgs := newAccessMgrNode(trustedNodeID, trustedNodePubKey, hasAccess) msgs.AddAll(trustedNodeMsgs) amd.nodes.Set(trustedNodeID, trustedNode) } @@ -176,11 +167,10 @@ func (amd *accessMgrDist) handleInputTrustedNodes(input *inputTrustedNodes) gpa. if _, ok := trustedIndex[nodeID]; ok { return true } - amd.chains.ForEach(func(_ isc.ChainID, chain *accessMgrChain) bool { - chain.MarkAsServerFor(node.pubKey, false) - msgs.AddAll(node.SetChainAccess(chain.chainID, false)) - return true - }) + if amd.chain != nil { + amd.chain.MarkAsServerFor(node.pubKey, false) + msgs.AddAll(node.SetChainAccess(false)) + } amd.nodes.Delete(nodeID) amd.dismissPeerCB(node.pubKey) return true @@ -195,10 +185,9 @@ func (amd *accessMgrDist) handleMsgAccess(msg *msgAccess) gpa.OutMessages { } msgs := node.handleMsgAccess(msg) - amd.chains.ForEach(func(chainID isc.ChainID, chain *accessMgrChain) bool { - chain.MarkAsServerFor(node.pubKey, node.serverFor.Has(chainID)) - return true - }) + if amd.chain != nil { + amd.chain.MarkAsServerFor(node.pubKey, node.isServer) + } return msgs } @@ -206,23 +195,20 @@ func (amd *accessMgrDist) handleMsgAccess(msg *msgAccess) gpa.OutMessages { //////////////////////////////////////////////////////////////////////////////// type accessMgrChain struct { - chainID isc.ChainID access map[gpa.NodeID]*cryptolib.PublicKey server *shrinkingmap.ShrinkingMap[gpa.NodeID, *cryptolib.PublicKey] pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID - serversUpdatedCB func(isc.ChainID, []*cryptolib.PublicKey) + serversUpdatedCB func([]*cryptolib.PublicKey) log log.Logger } func newAccessMgrChain( - chainID isc.ChainID, pubKeyToNodeID func(*cryptolib.PublicKey) gpa.NodeID, initialServers []*cryptolib.PublicKey, - serversUpdatedCB func(isc.ChainID, []*cryptolib.PublicKey), + serversUpdatedCB func([]*cryptolib.PublicKey), log log.Logger, ) *accessMgrChain { amc := &accessMgrChain{ - chainID: chainID, access: map[gpa.NodeID]*cryptolib.PublicKey{}, server: shrinkingmap.New[gpa.NodeID, *cryptolib.PublicKey](), pubKeyToNodeID: pubKeyToNodeID, @@ -235,8 +221,8 @@ func newAccessMgrChain( } serverNodes := amc.server.Values() - amc.log.LogDebugf("Chain %v server nodes updated to %+v on init.", amc.chainID.ShortString(), serverNodes) - amc.serversUpdatedCB(amc.chainID, serverNodes) + amc.log.LogDebugf("Chain server nodes updated to %+v on init.", serverNodes) + amc.serversUpdatedCB(serverNodes) return amc } @@ -258,8 +244,8 @@ func (amc *accessMgrChain) MarkAsServerFor(nodePubKey *cryptolib.PublicKey, gran } if wasServer != granted { serverNodes := amc.server.Values() - amc.log.LogDebugf("Chain %v server nodes updated to %+v.", amc.chainID.ShortString(), serverNodes) - amc.serversUpdatedCB(amc.chainID, serverNodes) + amc.log.LogDebugf("Chain server nodes updated to %+v.", serverNodes) + amc.serversUpdatedCB(serverNodes) } } @@ -272,8 +258,8 @@ func (amc *accessMgrChain) Disabled() { if amc.server.Size() == 0 { return } - amc.log.LogDebugf("Chain %v server nodes updated to [] on dismiss.", amc.chainID.ShortString()) - amc.serversUpdatedCB(amc.chainID, []*cryptolib.PublicKey{}) + amc.log.LogDebugf("Chain server nodes updated to [] on dismiss.") + amc.serversUpdatedCB([]*cryptolib.PublicKey{}) } //////////////////////////////////////////////////////////////////////////////// @@ -283,83 +269,81 @@ type accessMgrNode struct { pubKey *cryptolib.PublicKey ourLC int peerLC int - accessFor *chainSet - serverFor *chainSet + hasAccess bool + isServer bool } func newAccessMgrNode( nodeID gpa.NodeID, pubKey *cryptolib.PublicKey, - accessFor *chainSet, + hasAccess bool, ) (*accessMgrNode, gpa.OutMessages) { amn := &accessMgrNode{ nodeID: nodeID, pubKey: pubKey, ourLC: 1, peerLC: 0, - accessFor: accessFor, - serverFor: newChainSet(), + hasAccess: hasAccess, + isServer: false, } msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice())) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) return amn, msgs } -func (amn *accessMgrNode) SetChainAccess(chainID isc.ChainID, access bool) gpa.OutMessages { +func (amn *accessMgrNode) SetChainAccess(access bool) gpa.OutMessages { if access { - return amn.grantAccess(chainID) + return amn.grantAccess() } - return amn.revokeAccess(chainID) + return amn.revokeAccess() } -func (amn *accessMgrNode) grantAccess(chainID isc.ChainID) gpa.OutMessages { - if amn.accessFor.Has(chainID) { +func (amn *accessMgrNode) grantAccess() gpa.OutMessages { + if amn.hasAccess { return nil } - amn.accessFor.Add(chainID) + amn.hasAccess = true amn.ourLC++ msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice())) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) return msgs } -func (amn *accessMgrNode) revokeAccess(chainID isc.ChainID) gpa.OutMessages { - if !amn.accessFor.Has(chainID) { +func (amn *accessMgrNode) revokeAccess() gpa.OutMessages { + if !amn.hasAccess { return nil } - amn.accessFor.Delete(chainID) + amn.hasAccess = false amn.ourLC++ msgs := gpa.NoMessages() - msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice())) + msgs.Add(newMsgAccess(amn.nodeID, amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer)) return msgs } func (amn *accessMgrNode) handleMsgAccess(msg *msgAccess) gpa.OutMessages { // This has to be checked before updating the state. - // > IF /\ m.access = serverForChains(n, m.src) \* Peer's info hasn't changed, so we don't need to ack it. - // > /\ m.server = H(accessForChains(n, m.src)) \* Our info echoed, so that was an ack. + // > IF /\ m.access = isServer(n, m.src) \* Peer's info hasn't changed, so we don't need to ack it. + // > /\ m.server = H(hasAccess(n, m.src)) \* Our info echoed, so that was an ack. // > /\ m.src_lc >= lClock[n][m.src] \* Peer's clock is not outdated, we don't need to push it forward. // > /\ m.dst_lc <= lClock[n][n] \* And the echoed clock don't exceed our clock, so we don't need to push it. // > THEN sendAndAck(m, {}) // > ELSE sendAndAck(m, accessMsgs(n)) sendDone := true && - util.Same(msg.accessForChains, amn.serverFor.AsSlice()) && - util.Same(msg.serverForChains, amn.accessFor.AsSlice()) && + msg.hasAccess == amn.isServer && + msg.isServer == amn.hasAccess && msg.senderLClock >= amn.peerLC && msg.receiverLClock <= amn.ourLC // - // Update serverFor and peerLC. + // Update isServer and peerLC. if msg.senderLClock > amn.peerLC { - amn.serverFor.FromSlice(msg.accessForChains) + amn.isServer = msg.hasAccess amn.peerLC = msg.senderLClock } // // Update ourLC. if amn.ourLC <= msg.receiverLClock { amn.ourLC = msg.receiverLClock - msgServerFor := newChainSet() - msgServerFor.FromSlice(msg.serverForChains) - if !amn.accessFor.Equals(msgServerFor) { + if !amn.hasAccess == msg.isServer { amn.ourLC++ } } @@ -367,58 +351,10 @@ func (amn *accessMgrNode) handleMsgAccess(msg *msgAccess) gpa.OutMessages { // Send message back, if needed. if !sendDone { return gpa.NoMessages().Add( - newMsgAccess(msg.Sender(), amn.ourLC, amn.peerLC, amn.accessFor.AsSlice(), amn.serverFor.AsSlice()), + newMsgAccess(msg.Sender(), amn.ourLC, amn.peerLC, amn.hasAccess, amn.isServer), ) } return nil } //////////////////////////////////////////////////////////////////////////////// - -type chainSet struct { - elements *shrinkingmap.ShrinkingMap[isc.ChainID, struct{}] -} - -func newChainSet() *chainSet { - return &chainSet{elements: shrinkingmap.New[isc.ChainID, struct{}]()} -} - -func (cs *chainSet) Add(elem isc.ChainID) { - cs.elements.Set(elem, struct{}{}) -} - -func (cs *chainSet) Delete(elem isc.ChainID) { - cs.elements.Delete(elem) -} - -func (cs *chainSet) Has(elem isc.ChainID) bool { - return cs.elements.Has(elem) -} - -func (cs *chainSet) AsSlice() []isc.ChainID { - return cs.elements.Keys() -} - -func (cs *chainSet) FromSlice(els []isc.ChainID) { - cs.elements = shrinkingmap.New[isc.ChainID, struct{}]() - for _, el := range els { - cs.elements.Set(el, struct{}{}) - } -} - -func (cs *chainSet) Equals(other *chainSet) bool { - if cs.elements.Size() != other.elements.Size() { - return false - } - - equal := true - cs.elements.ForEach(func(ci isc.ChainID, s struct{}) bool { - if !other.elements.Has(ci) { - equal = false - return false - } - return true - }) - - return equal -} diff --git a/packages/chainrunner/dist/access_manager_dist_test.go b/packages/chainrunner/dist/access_manager_dist_test.go index 030e34500d..5bae4106c3 100644 --- a/packages/chainrunner/dist/access_manager_dist_test.go +++ b/packages/chainrunner/dist/access_manager_dist_test.go @@ -9,11 +9,9 @@ import ( "github.com/stretchr/testify/require" - "github.com/iotaledger/wasp/v2/packages/chains/accessmanager/dist" + "github.com/iotaledger/wasp/v2/packages/chainrunner/accessmanager/dist" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" "github.com/iotaledger/wasp/v2/packages/testutil/testpeers" "github.com/iotaledger/wasp/v2/packages/util" @@ -30,7 +28,6 @@ func testBasic(t *testing.T, n int) { _, peerIdentities := testpeers.SetupKeys(uint16(n)) nodePubs := testpeers.PublicKeys(peerIdentities) nodeIDs := gpa.NodeIDsFromPublicKeys(nodePubs) - chainID := isctest.RandomChainID() servers := map[gpa.NodeID][]*cryptolib.PublicKey{} nodes := map[gpa.NodeID]gpa.GPA{} @@ -38,7 +35,7 @@ func testBasic(t *testing.T, n int) { nidCopy := nid nodes[nid] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, - func(ci isc.ChainID, pks []*cryptolib.PublicKey) { + func(pks []*cryptolib.PublicKey) { servers[nidCopy] = pks }, func(pk *cryptolib.PublicKey) {}, @@ -49,7 +46,7 @@ func testBasic(t *testing.T, n int) { tc := gpa.NewTestContext(nodes) for _, nid := range nodeIDs { tc.WithInput(nid, dist.NewInputTrustedNodes(nodePubs)) - tc.WithInput(nid, dist.NewInputAccessNodes(chainID, nodePubs)) + tc.WithInput(nid, dist.NewInputAccessNodes(nodePubs)) } tc.RunAll() for nid := range nodes { diff --git a/packages/chainrunner/dist/access_manager_rapid_test.go b/packages/chainrunner/dist/access_manager_rapid_test.go index 44b46d6b68..98c558fdde 100644 --- a/packages/chainrunner/dist/access_manager_rapid_test.go +++ b/packages/chainrunner/dist/access_manager_rapid_test.go @@ -12,11 +12,9 @@ import ( "pgregory.net/rapid" "github.com/iotaledger/hive.go/log" - "github.com/iotaledger/wasp/v2/packages/chains/accessmanager/dist" + "github.com/iotaledger/wasp/v2/packages/chainrunner/accessmanager/dist" "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" "github.com/iotaledger/wasp/v2/packages/testutil/testlogger" "github.com/iotaledger/wasp/v2/packages/testutil/testpeers" "github.com/iotaledger/wasp/v2/packages/util" @@ -30,59 +28,49 @@ type accessMgrSM struct { nodeKeys []*cryptolib.KeyPair nodePubs []*cryptolib.PublicKey nodeIDs []gpa.NodeID - chainIDs []isc.ChainID genNodeID *rapid.Generator[gpa.NodeID] genNodePub *rapid.Generator[*cryptolib.PublicKey] genNodePubSlice *rapid.Generator[[]*cryptolib.PublicKey] - genChainID *rapid.Generator[isc.ChainID] // // These are set up for each scenario. tc *gpa.TestContext nodes map[gpa.NodeID]gpa.GPA - servers map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey + servers map[gpa.NodeID][]*cryptolib.PublicKey // // Model. mTrusted map[gpa.NodeID][]*cryptolib.PublicKey - mActive map[gpa.NodeID]map[isc.ChainID]bool - mAccess map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey + mActive map[gpa.NodeID]bool + mAccess map[gpa.NodeID][]*cryptolib.PublicKey } var _ rapid.StateMachine = &accessMgrSM{} -func newAccessMgrSM(t *rapid.T, nodeCount, chainCount int) *accessMgrSM { +func newAccessMgrSM(t *rapid.T, nodeCount int) *accessMgrSM { sm := new(accessMgrSM) if !sm.initialized { sm.log = testlogger.NewLogger(t) _, sm.nodeKeys = testpeers.SetupKeys(uint16(nodeCount)) sm.nodePubs = testpeers.PublicKeys(sm.nodeKeys) sm.nodeIDs = gpa.NodeIDsFromPublicKeys(sm.nodePubs) - sm.chainIDs = make([]isc.ChainID, chainCount) - for i := range sm.chainIDs { - sm.chainIDs[i] = isctest.RandomChainID([]byte{byte(i)}) - } sm.genNodeID = rapid.SampledFrom(sm.nodeIDs) sm.genNodePub = rapid.SampledFrom(sm.nodePubs) sm.genNodePubSlice = rapid.SliceOfDistinct( sm.genNodePub, func(pub *cryptolib.PublicKey) cryptolib.PublicKeyKey { return pub.AsKey() }, ) - sm.genChainID = rapid.SampledFrom(sm.chainIDs) sm.initialized = true } - sm.servers = map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey{} + sm.servers = map[gpa.NodeID][]*cryptolib.PublicKey{} sm.nodes = map[gpa.NodeID]gpa.GPA{} for _, nid := range sm.nodeIDs { - sm.servers[nid] = map[isc.ChainID][]*cryptolib.PublicKey{} - for _, chainID := range sm.chainIDs { - sm.servers[nid][chainID] = []*cryptolib.PublicKey{} - } + sm.servers[nid] = []*cryptolib.PublicKey{} nidCopy := nid sm.nodes[nid] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, - func(chainID isc.ChainID, servers []*cryptolib.PublicKey) { - t.Logf("serversUpdatedCB: nodeID=%v, chainID=%v, servers=%v", nidCopy, chainID, servers) - sm.servers[nidCopy][chainID] = servers + func(servers []*cryptolib.PublicKey) { + t.Logf("serversUpdatedCB: nodeID=%v, servers=%v", nidCopy, servers) + sm.servers[nidCopy] = servers }, func(pk *cryptolib.PublicKey) {}, sm.log.NewChildLogger(nid.ShortString()), @@ -91,16 +79,13 @@ func newAccessMgrSM(t *rapid.T, nodeCount, chainCount int) *accessMgrSM { sm.tc = gpa.NewTestContext(sm.nodes) sm.mTrusted = map[gpa.NodeID][]*cryptolib.PublicKey{} - sm.mActive = map[gpa.NodeID]map[isc.ChainID]bool{} - sm.mAccess = map[gpa.NodeID]map[isc.ChainID][]*cryptolib.PublicKey{} + sm.mActive = map[gpa.NodeID]bool{} + sm.mAccess = map[gpa.NodeID][]*cryptolib.PublicKey{} for _, nid := range sm.nodeIDs { sm.mTrusted[nid] = []*cryptolib.PublicKey{} - sm.mAccess[nid] = map[isc.ChainID][]*cryptolib.PublicKey{} - sm.mActive[nid] = map[isc.ChainID]bool{} - for _, ch := range sm.chainIDs { - sm.mAccess[nid][ch] = []*cryptolib.PublicKey{} - sm.mActive[nid][ch] = false - } + sm.mAccess[nid] = []*cryptolib.PublicKey{} + sm.mAccess[nid] = []*cryptolib.PublicKey{} + sm.mActive[nid] = false } return sm } @@ -114,18 +99,16 @@ func (sm *accessMgrSM) InputTrustedNodes(t *rapid.T) { func (sm *accessMgrSM) InputAccessNodes(t *rapid.T) { nodeID := sm.genNodeID.Draw(t, "nodeID") - chainID := sm.genChainID.Draw(t, "chainID") accessNodes := sm.genNodePubSlice.Draw(t, "accessNodes") - sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(chainID, accessNodes)).RunAll() - sm.mActive[nodeID][chainID] = true - sm.mAccess[nodeID][chainID] = accessNodes + sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(accessNodes)).RunAll() + sm.mActive[nodeID] = true + sm.mAccess[nodeID] = accessNodes } func (sm *accessMgrSM) InputChainDisabled(t *rapid.T) { nodeID := sm.genNodeID.Draw(t, "nodeID") - chainID := sm.genChainID.Draw(t, "chainID") - sm.tc.WithInput(nodeID, dist.NewInputChainDisabled(chainID)).RunAll() - sm.mActive[nodeID][chainID] = false + sm.tc.WithInput(nodeID, dist.NewInputChainDisabled()).RunAll() + sm.mActive[nodeID] = false } func (sm *accessMgrSM) Reboot(t *rapid.T) { @@ -134,9 +117,9 @@ func (sm *accessMgrSM) Reboot(t *rapid.T) { // Just recreate a node. sm.nodes[nodeID] = dist.NewAccessMgr( gpa.NodeIDFromPublicKey, - func(chainID isc.ChainID, servers []*cryptolib.PublicKey) { - t.Logf("serversUpdatedCB: nodeID=%v, chainID=%v, servers=%v", nodeID, chainID, servers) - sm.servers[nodeID][chainID] = servers + func(servers []*cryptolib.PublicKey) { + t.Logf("serversUpdatedCB: nodeID=%v, servers=%v", nodeID, servers) + sm.servers[nodeID] = servers }, func(pk *cryptolib.PublicKey) {}, sm.log.NewChildLogger(nodeID.ShortString()), @@ -145,11 +128,8 @@ func (sm *accessMgrSM) Reboot(t *rapid.T) { // Re-initialize all the persistent info: access information, active chains, trusted nodes. // But the servers are not restored here. The algorithm has to restore that. sm.tc.WithInput(nodeID, dist.NewInputTrustedNodes(sm.mTrusted[nodeID])) - for _, chainID := range sm.chainIDs { - if !sm.mActive[nodeID][chainID] { - continue - } - sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(chainID, sm.mAccess[nodeID][chainID])) + if sm.mActive[nodeID] { + sm.tc.WithInput(nodeID, dist.NewInputAccessNodes(sm.mAccess[nodeID])) } sm.tc.RunAll() } @@ -157,24 +137,22 @@ func (sm *accessMgrSM) Reboot(t *rapid.T) { func (sm *accessMgrSM) Check(t *rapid.T) { for _, nodePub := range sm.nodePubs { nodeID := gpa.NodeIDFromPublicKey(nodePub) - for _, chainID := range sm.chainIDs { - shouldBeServers := []*cryptolib.PublicKey{} - for _, peerPub := range sm.nodePubs { - peerID := gpa.NodeIDFromPublicKey(peerPub) - if sm.mActive[nodeID][chainID] && - sm.mActive[peerID][chainID] && - lo.Contains(sm.mTrusted[peerID], nodePub) && - lo.Contains(sm.mTrusted[nodeID], peerPub) && - lo.Contains(sm.mAccess[peerID][chainID], nodePub) { - shouldBeServers = append(shouldBeServers, peerPub) - } + shouldBeServers := []*cryptolib.PublicKey{} + for _, peerPub := range sm.nodePubs { + peerID := gpa.NodeIDFromPublicKey(peerPub) + if sm.mActive[nodeID] && + sm.mActive[peerID] && + lo.Contains(sm.mTrusted[peerID], nodePub) && + lo.Contains(sm.mTrusted[nodeID], peerPub) && + lo.Contains(sm.mAccess[peerID], nodePub) { + shouldBeServers = append(shouldBeServers, peerPub) } - require.True(t, - util.Same(sm.servers[nodeID][chainID], shouldBeServers), - "nodeID=%v, chainID=%v, have=%v, expect=%v", - nodeID, chainID, sm.servers[nodeID][chainID], shouldBeServers, - ) } + require.True(t, + util.Same(sm.servers[nodeID], shouldBeServers), + "nodeID=%v, chainID=%v, have=%v, expect=%v", + nodeID, sm.servers[nodeID], shouldBeServers, + ) } } @@ -183,15 +161,14 @@ func (sm *accessMgrSM) Check(t *rapid.T) { func TestAccessMgrRapid(t *testing.T) { tests := []struct { n int - c int }{ - {n: 1, c: 1}, - {n: 2, c: 1}, - {n: 4, c: 3}, + {n: 1}, + {n: 2}, + {n: 4}, } for _, test := range tests { - t.Run(fmt.Sprintf("N%d C%d", test.n, test.c), rapid.MakeCheck(func(t *rapid.T) { - sm := newAccessMgrSM(t, test.n, test.c) + t.Run(fmt.Sprintf("N%d", test.n), rapid.MakeCheck(func(t *rapid.T) { + sm := newAccessMgrSM(t, test.n) t.Repeat(rapid.StateMachineActions(sm)) })) } diff --git a/packages/chainrunner/dist/input_access_nodes.go b/packages/chainrunner/dist/input_access_nodes.go index f0f8d92a33..4c9f03ede5 100644 --- a/packages/chainrunner/dist/input_access_nodes.go +++ b/packages/chainrunner/dist/input_access_nodes.go @@ -6,16 +6,14 @@ package dist import ( "github.com/iotaledger/wasp/v2/packages/cryptolib" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" ) type inputAccessNodes struct { - chainID isc.ChainID accessNodes []*cryptolib.PublicKey } var _ gpa.Input = &inputAccessNodes{} -func NewInputAccessNodes(chainID isc.ChainID, accessNodes []*cryptolib.PublicKey) gpa.Input { - return &inputAccessNodes{chainID: chainID, accessNodes: accessNodes} +func NewInputAccessNodes(accessNodes []*cryptolib.PublicKey) gpa.Input { + return &inputAccessNodes{accessNodes: accessNodes} } diff --git a/packages/chainrunner/dist/input_chain_disabled.go b/packages/chainrunner/dist/input_chain_disabled.go index bcd9ff432c..4f202b1742 100644 --- a/packages/chainrunner/dist/input_chain_disabled.go +++ b/packages/chainrunner/dist/input_chain_disabled.go @@ -2,13 +2,10 @@ package dist import ( "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" ) -type inputChainDisabled struct { - chainID isc.ChainID -} +type inputChainDisabled struct{} -func NewInputChainDisabled(chainID isc.ChainID) gpa.Input { - return &inputChainDisabled{chainID: chainID} +func NewInputChainDisabled() gpa.Input { + return &inputChainDisabled{} } diff --git a/packages/chainrunner/dist/msg_access.go b/packages/chainrunner/dist/msg_access.go index e68274e437..011683c688 100644 --- a/packages/chainrunner/dist/msg_access.go +++ b/packages/chainrunner/dist/msg_access.go @@ -5,16 +5,15 @@ package dist import ( "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" ) // Send by a node which has a chain enabled to a node it considers an access node. type msgAccess struct { gpa.BasicMessage - senderLClock int `bcs:"export,type=u32"` - receiverLClock int `bcs:"export,type=u32"` - accessForChains []isc.ChainID `bcs:"export,len_bytes=2"` - serverForChains []isc.ChainID `bcs:"export,len_bytes=2"` + senderLClock int `bcs:"export,type=u32"` + receiverLClock int `bcs:"export,type=u32"` + hasAccess bool `bcs:"export"` + isServer bool `bcs:"export"` } var _ gpa.Message = new(msgAccess) @@ -22,15 +21,15 @@ var _ gpa.Message = new(msgAccess) func newMsgAccess( recipient gpa.NodeID, senderLClock, receiverLClock int, - accessForChains []isc.ChainID, - serverForChains []isc.ChainID, + hasAccess bool, + isServer bool, ) gpa.Message { return &msgAccess{ - BasicMessage: gpa.NewBasicMessage(recipient), - senderLClock: senderLClock, - receiverLClock: receiverLClock, - accessForChains: accessForChains, - serverForChains: serverForChains, + BasicMessage: gpa.NewBasicMessage(recipient), + senderLClock: senderLClock, + receiverLClock: receiverLClock, + hasAccess: hasAccess, + isServer: isServer, } } diff --git a/packages/chainrunner/dist/msg_access_test.go b/packages/chainrunner/dist/msg_access_test.go index e1d0318528..d18b223546 100644 --- a/packages/chainrunner/dist/msg_access_test.go +++ b/packages/chainrunner/dist/msg_access_test.go @@ -10,8 +10,6 @@ import ( bcs "github.com/iotaledger/bcs-go" "github.com/iotaledger/wasp/v2/packages/gpa" - "github.com/iotaledger/wasp/v2/packages/isc" - "github.com/iotaledger/wasp/v2/packages/isc/isctest" ) func TestMsgAccessSerialization(t *testing.T) { @@ -19,8 +17,8 @@ func TestMsgAccessSerialization(t *testing.T) { gpa.BasicMessage{}, rand.Intn(math.MaxUint32 + 1), rand.Intn(math.MaxUint32 + 1), - []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, - []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, + true, + true, } bcs.TestCodec(t, msg) @@ -29,8 +27,8 @@ func TestMsgAccessSerialization(t *testing.T) { gpa.BasicMessage{}, math.MaxUint32, math.MaxUint32, - []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, - []isc.ChainID{isctest.RandomChainID(), isctest.RandomChainID()}, + true, + true, } bcs.TestCodec(t, msg) From ebc929e19974739a9de98ab3166f329d908630c9 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Wed, 20 Aug 2025 07:37:02 -0700 Subject: [PATCH 21/27] Removed unneeded changes --- packages/webapi/dto/chain.go | 4 ++-- packages/webapi/services/chain.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/webapi/dto/chain.go b/packages/webapi/dto/chain.go index 1742722b20..bff78a5584 100644 --- a/packages/webapi/dto/chain.go +++ b/packages/webapi/dto/chain.go @@ -32,10 +32,10 @@ type ChainInfo struct { Metadata PublicChainMetadata } -func MapChainInfo(chID isc.ChainID, info *isc.ChainInfo, isActive bool) *ChainInfo { +func MapChainInfo(info *isc.ChainInfo, isActive bool) *ChainInfo { chainInfo := &ChainInfo{ IsActive: isActive, - ChainID: chID, + ChainID: info.ChainID, ChainAdmin: info.ChainAdmin, GasFeePolicy: info.GasFeePolicy, GasLimits: info.GasLimits, diff --git a/packages/webapi/services/chain.go b/packages/webapi/services/chain.go index 6702402382..e33c3aa133 100644 --- a/packages/webapi/services/chain.go +++ b/packages/webapi/services/chain.go @@ -151,7 +151,7 @@ func (c *ChainService) GetChainInfo(blockIndexOrTrieRoot string) (*dto.ChainInfo return nil, err } - chainInfo := dto.MapChainInfo(ch.ID(), governanceChainInfo, chainRecord.Active) + chainInfo := dto.MapChainInfo(governanceChainInfo, chainRecord.Active) return chainInfo, nil } From d2899b6848caeef57f7e1f3256462570a81033b7 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Fri, 22 Aug 2025 01:49:40 -0700 Subject: [PATCH 22/27] Fixed test build --- packages/chainrunner/runner.go | 6 +++--- packages/registry/chain_registry.go | 16 ++++------------ packages/registry/providers.go | 2 +- packages/webapi/services/chain.go | 16 +++++----------- packages/webapi/services/registry.go | 2 +- tools/cluster/tests/estimategas_test.go | 6 +++--- 6 files changed, 17 insertions(+), 31 deletions(-) diff --git a/packages/chainrunner/runner.go b/packages/chainrunner/runner.go index 3fbac151d9..4602ae681c 100644 --- a/packages/chainrunner/runner.go +++ b/packages/chainrunner/runner.go @@ -274,9 +274,9 @@ func (c *ChainRunner) activateWithoutLocking() error { //nolint:funlen // // Activate the chain in the persistent store, if it is not activated yet. - chainRecord, err := c.chainRecordRegistryProvider.ChainRecord() - if err != nil { - return fmt.Errorf("chain record does not exist: %w", err) + chainRecord := c.chainRecordRegistryProvider.ChainRecord() + if chainRecord == nil { + return fmt.Errorf("chain record does not exist") } if !chainRecord.Active { if _, err2 := c.chainRecordRegistryProvider.ActivateChainRecord(); err2 != nil { diff --git a/packages/registry/chain_registry.go b/packages/registry/chain_registry.go index 5fa9617510..f4374901ce 100644 --- a/packages/registry/chain_registry.go +++ b/packages/registry/chain_registry.go @@ -235,26 +235,18 @@ func (p *ChainRecordRegistryImpl) Events() *ChainRecordRegistryEvents { return p.events } -func (p *ChainRecordRegistryImpl) ChainRecord() (*ChainRecord, error) { +func (p *ChainRecordRegistryImpl) ChainRecord() *ChainRecord { chainRecord, err := p.onChangeMap.Get(p.chainID) if err != nil { // chain record doesn't exist - return nil, nil + return nil } - return chainRecord, nil -} - -func (p *ChainRecordRegistryImpl) chainRecords() ([]*ChainRecord, error) { - return lo.Values(p.onChangeMap.All()), nil + return chainRecord } func (p *ChainRecordRegistryImpl) ForActiveChainRecord(consumer func(*ChainRecord) bool) error { - chainRecords, err := p.chainRecords() - if err != nil { - return err - } - + chainRecords := lo.Values(p.onChangeMap.All()) if len(chainRecords) > 1 { return fmt.Errorf("multiple chain records found, expected <= 1: %d", len(chainRecords)) } diff --git a/packages/registry/providers.go b/packages/registry/providers.go index 7f09170c1d..ee3b23cb0c 100644 --- a/packages/registry/providers.go +++ b/packages/registry/providers.go @@ -23,7 +23,7 @@ type DKShareRegistryProvider interface { type ChainRecordRegistryProvider interface { Events() *ChainRecordRegistryEvents - ChainRecord() (*ChainRecord, error) + ChainRecord() *ChainRecord ForActiveChainRecord(consumer func(*ChainRecord) bool) error SetChainRecord(chainRecord *ChainRecord) error DeleteChainRecord() error diff --git a/packages/webapi/services/chain.go b/packages/webapi/services/chain.go index e33c3aa133..e1265129d4 100644 --- a/packages/webapi/services/chain.go +++ b/packages/webapi/services/chain.go @@ -66,12 +66,9 @@ func (c *ChainService) DeactivateChain() error { } func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { - storedChainRec, err := c.chainRecordRegistryProvider.ChainRecord() - if err != nil { - return err - } + storedChainRec := c.chainRecordRegistryProvider.ChainRecord() - c.log.LogInfof("StoredChainRec %v %v", storedChainRec, err) + c.log.LogInfof("StoredChainRec %v", storedChainRec) if storedChainRec != nil { if storedChainRec.ChainID() != chainRecord.ChainID() { @@ -79,7 +76,7 @@ func (c *ChainService) SetChainRecord(chainRecord *registry.ChainRecord) error { storedChainRec.ChainID().String(), chainRecord.ChainID().String()) } - _, err = c.chainRecordRegistryProvider.UpdateChainRecord( + _, err := c.chainRecordRegistryProvider.UpdateChainRecord( func(rec *registry.ChainRecord) bool { rec.AccessNodes = chainRecord.AccessNodes rec.Active = chainRecord.Active @@ -137,10 +134,7 @@ func (c *ChainService) GetChainInfo(blockIndexOrTrieRoot string) (*dto.ChainInfo return nil, err } - chainRecord, err := c.chainRecordRegistryProvider.ChainRecord() - if err != nil { - return nil, err - } + chainRecord := c.chainRecordRegistryProvider.ChainRecord() governanceChainInfo, err := corecontracts.GetChainInfo(ch, blockIndexOrTrieRoot) if err != nil { @@ -151,7 +145,7 @@ func (c *ChainService) GetChainInfo(blockIndexOrTrieRoot string) (*dto.ChainInfo return nil, err } - chainInfo := dto.MapChainInfo(governanceChainInfo, chainRecord.Active) + chainInfo := dto.MapChainInfo(governanceChainInfo, chainRecord != nil && chainRecord.Active) return chainInfo, nil } diff --git a/packages/webapi/services/registry.go b/packages/webapi/services/registry.go index d94ef99b8b..d60d0d4fb5 100644 --- a/packages/webapi/services/registry.go +++ b/packages/webapi/services/registry.go @@ -19,5 +19,5 @@ func NewRegistryService(chainRunner *chainrunner.ChainRunner, chainRecordRegistr } func (c *RegistryService) GetChainRecord() (*registry.ChainRecord, error) { - return c.chainRecordRegistryProvider.ChainRecord() + return c.chainRecordRegistryProvider.ChainRecord(), nil } diff --git a/tools/cluster/tests/estimategas_test.go b/tools/cluster/tests/estimategas_test.go index 6ede7ca473..ee5d924494 100644 --- a/tools/cluster/tests/estimategas_test.go +++ b/tools/cluster/tests/estimategas_test.go @@ -47,7 +47,7 @@ func (e *ChainEnv) testEstimateGasOnLedger(t *testing.T) { GasBudget: iotaclient.DefaultGasBudget, }) require.NoError(t, err) - _, err = e.Clu.MultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), e.Chain.ChainID, tx, true, 10*time.Second) + _, err = e.Clu.MultiClient().WaitUntilAllRequestsProcessedSuccessfully(context.Background(), tx, true, 10*time.Second) require.NoError(t, err) // Create tx sender with some funds @@ -234,7 +234,7 @@ func (e *ChainEnv) testEstimateGasOnLedger(t *testing.T) { require.Equal(t, estimatedStorageFee, res.Effects.Data.V1.GasUsed.StorageCost.Int.Uint64()) require.LessOrEqual(t, estimatedStorageRebate, res.Effects.Data.V1.GasUsed.StorageRebate.Int.Uint64()) - recs, err := e.Clu.MultiClient().WaitUntilAllRequestsProcessed(context.Background(), e.Chain.ChainID, res, false, 10*time.Second) + recs, err := e.Clu.MultiClient().WaitUntilAllRequestsProcessed(context.Background(), res, false, 10*time.Second) require.NoError(t, err, recs) require.Empty(t, recs[0].ErrorMessage, lo.FromPtr(recs[0].ErrorMessage)) require.Equal(t, recs[0].GasBurned, estimatedReceipt.L2.GasBurned) @@ -254,7 +254,7 @@ func (e *ChainEnv) testEstimateGasOnLedger(t *testing.T) { require.NoError(t, err) require.Empty(t, res.Errors) require.Empty(t, res.Effects.Data.V1.Status.Error, res.Effects.Data.V1.Status.Status) - recs, _ = e.Clu.MultiClient().WaitUntilAllRequestsProcessed(context.Background(), e.Chain.ChainID, res, false, 10*time.Second) + recs, _ = e.Clu.MultiClient().WaitUntilAllRequestsProcessed(context.Background(), res, false, 10*time.Second) require.Equal(t, "gas budget exceeded", lo.FromPtr(recs[0].ErrorMessage)) } From 69cef92d4bb23d925cbea2f445966b3fe152dc1f Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Fri, 22 Aug 2025 09:21:22 -0700 Subject: [PATCH 23/27] Fixed node startup --- packages/chainrunner/runner.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/chainrunner/runner.go b/packages/chainrunner/runner.go index 4602ae681c..bb89c757dd 100644 --- a/packages/chainrunner/runner.go +++ b/packages/chainrunner/runner.go @@ -222,7 +222,7 @@ func (c *ChainRunner) Run(ctx context.Context) error { }).Unhook c.cleanupFunc = unhook - return c.activateWithoutLocking() //nolint:contextcheck + return c.activateFromRegistry() //nolint:contextcheck } func (c *ChainRunner) Close() { @@ -256,6 +256,22 @@ func (c *ChainRunner) chainAccessUpdatedCB(accessNodes []*cryptolib.PublicKey) { c.accessMgr.ChainAccessNodes(accessNodes) } +func (c *ChainRunner) activateFromRegistry() error { + var innerErr error + if err := c.chainRecordRegistryProvider.ForActiveChainRecord(func(chainRecord *registry.ChainRecord) bool { + if err := c.activateWithoutLocking(); err != nil { + innerErr = fmt.Errorf("cannot activate chain %s: %w", chainRecord.ChainID(), err) + return false + } + + return true + }); err != nil { + return err + } + + return innerErr +} + // activateWithoutLocking activates a chain in the node. func (c *ChainRunner) activateWithoutLocking() error { //nolint:funlen if c.ctx == nil { From dbc95b29f90e536e2420ea90c20e6031d3e4c95d Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Fri, 22 Aug 2025 09:29:37 -0700 Subject: [PATCH 24/27] Fixed lint --- components/chainrunner/params.go | 2 +- packages/chain/statemanager/gpa/utils/block_wal.go | 2 +- packages/chainrunner/accessmanager/access_manager.go | 2 +- .../chainrunner/accessmanager/dist/access_manager_dist.go | 2 +- packages/nodeconn/nodeconn.go | 5 ----- 5 files changed, 4 insertions(+), 9 deletions(-) diff --git a/components/chainrunner/params.go b/components/chainrunner/params.go index 50f1c1e465..8ffd06d6f4 100644 --- a/components/chainrunner/params.go +++ b/components/chainrunner/params.go @@ -1,4 +1,4 @@ -// Package chains provides functionality for managing IOTA Smart Contract chain runner, +// Package chainrunner provides functionality for managing IOTA Smart Contract chain runner, // including chain configuration parameters, write-ahead logging, validator settings, // state management, and snapshot capabilities. package chainrunner diff --git a/packages/chain/statemanager/gpa/utils/block_wal.go b/packages/chain/statemanager/gpa/utils/block_wal.go index 966da5c7c9..897b023598 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal.go +++ b/packages/chain/statemanager/gpa/utils/block_wal.go @@ -33,7 +33,7 @@ const ( constBlockWALTmpFileSuffix = ".tmp" ) -// Chain ID kept for backward compatibility +// Chain ID kept for backward compatibility //nolint:staticcheck func NewBlockWAL(log log.Logger, baseDir string, chainID isc.ChainID, metrics *metrics.ChainBlockWALMetrics) (BlockWAL, error) { dir := filepath.Join(baseDir, chainID.String()) if err := ioutils.CreateDirectory(dir, 0o777); err != nil { diff --git a/packages/chainrunner/accessmanager/access_manager.go b/packages/chainrunner/accessmanager/access_manager.go index 0e2ed1aff0..9270a2dc79 100644 --- a/packages/chainrunner/accessmanager/access_manager.go +++ b/packages/chainrunner/accessmanager/access_manager.go @@ -179,7 +179,7 @@ func (ami *accessMgrImpl) handleReqChainAccessNodes(recv *reqChainAccessNodes) { ami.sendMessages(ami.dist.Input(dist.NewInputAccessNodes(recv.accessNodes))) } -func (ami *accessMgrImpl) handleReqChainDismissed(recv *reqChainDismissed) { +func (ami *accessMgrImpl) handleReqChainDismissed(_ *reqChainDismissed) { ami.log.LogDebugf("handleReqChainDismissed") ami.sendMessages(ami.dist.Input(dist.NewInputChainDisabled())) } diff --git a/packages/chainrunner/accessmanager/dist/access_manager_dist.go b/packages/chainrunner/accessmanager/dist/access_manager_dist.go index efc51c9bad..6645256d9d 100644 --- a/packages/chainrunner/accessmanager/dist/access_manager_dist.go +++ b/packages/chainrunner/accessmanager/dist/access_manager_dist.go @@ -100,7 +100,7 @@ func (amd *accessMgrDist) StatusString() string { } // > Notify all the trusted access nodes, that we will not serve the requests anymore. -func (amd *accessMgrDist) handleInputChainDisabled(input *inputChainDisabled) gpa.OutMessages { +func (amd *accessMgrDist) handleInputChainDisabled(_ *inputChainDisabled) gpa.OutMessages { if amd.chain == nil { return nil // Already disabled. } diff --git a/packages/nodeconn/nodeconn.go b/packages/nodeconn/nodeconn.go index 84078655f0..648f57803b 100644 --- a/packages/nodeconn/nodeconn.go +++ b/packages/nodeconn/nodeconn.go @@ -28,11 +28,6 @@ import ( "github.com/iotaledger/wasp/v2/packages/util" ) -const ( - chainsCleanupThresholdRatio = 50.0 - chainsCleanupThresholdCount = 10 -) - var ErrOperationAborted = errors.New("operation was aborted") type SingleL1Info struct { From 02ebe40b856c825bef1f0205e72895c842353fde Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Tue, 26 Aug 2025 02:59:48 -0700 Subject: [PATCH 25/27] Fixed node startup with pre-deployed chain --- packages/registry/chain_registry.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/packages/registry/chain_registry.go b/packages/registry/chain_registry.go index f4374901ce..1bdc68ea9a 100644 --- a/packages/registry/chain_registry.go +++ b/packages/registry/chain_registry.go @@ -144,7 +144,9 @@ type ChainRecordRegistryEvents struct { } type ChainRecordRegistryImpl struct { - chainID isc.ChainID // We only have one chain. Multi-chain code left for backwards compatibility. + // We only have one chain. Multi-chain code left for backwards compatibility. + // This field is automatically updated inside OnChangeMap's callback. + chainID isc.ChainID onChangeMap *onchangemap.OnChangeMap[isc.ChainIDKey, isc.ChainID, *ChainRecord] @@ -169,6 +171,10 @@ func NewChainRecordRegistryImpl(filePath string) (*ChainRecordRegistryImpl, erro }, } + // Upon initialization we dont need to store records onto disk, as they just were read from the disk. + // But we still do need callback to be called for chain ID to be updated. + writeChainRecordsUponUpdate := false + registry.onChangeMap = onchangemap.NewOnChangeMap( onchangemap.WithChangedCallback[isc.ChainIDKey, isc.ChainID](func(chainRecords []*ChainRecord) error { // Saving chain ID @@ -180,16 +186,21 @@ func NewChainRecordRegistryImpl(filePath string) (*ChainRecordRegistryImpl, erro registry.chainID = isc.ChainID{} } - return registry.writeChainRecordsJSON(chainRecords) + if writeChainRecordsUponUpdate { + return registry.writeChainRecordsJSON(chainRecords) + } + + return nil }), ) + registry.onChangeMap.CallbacksEnabled(true) // load chain records on startup if err := registry.loadChainRecordsJSON(); err != nil { return nil, fmt.Errorf("unable to read chain records configuration (%s): %w", filePath, err) } - registry.onChangeMap.CallbacksEnabled(true) + writeChainRecordsUponUpdate = true return registry, nil } From 809552a129a8bceaaa7b256a6a07b5c12fa6556d Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Tue, 2 Sep 2025 04:47:51 -0700 Subject: [PATCH 26/27] Fixed lint --- packages/chain/statemanager/gpa/utils/block_wal.go | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/chain/statemanager/gpa/utils/block_wal.go b/packages/chain/statemanager/gpa/utils/block_wal.go index 897b023598..572a979b1a 100644 --- a/packages/chain/statemanager/gpa/utils/block_wal.go +++ b/packages/chain/statemanager/gpa/utils/block_wal.go @@ -33,7 +33,6 @@ const ( constBlockWALTmpFileSuffix = ".tmp" ) -// Chain ID kept for backward compatibility //nolint:staticcheck func NewBlockWAL(log log.Logger, baseDir string, chainID isc.ChainID, metrics *metrics.ChainBlockWALMetrics) (BlockWAL, error) { dir := filepath.Join(baseDir, chainID.String()) if err := ioutils.CreateDirectory(dir, 0o777); err != nil { From 05c509d776707d448347743cd3d707773d416c82 Mon Sep 17 00:00:00 2001 From: Chris McCandless Date: Mon, 8 Sep 2025 02:33:58 -0700 Subject: [PATCH 27/27] Fixed some of the references to old "/chains/" routes --- clients/apiclient/CorecontractsApi.md | 2 +- clients/apiclient/api/openapi.yaml | 2 +- clients/apiclient/api_corecontracts.go | 2 +- clients/apiclient/apis/CorecontractsApi.ts | 2 +- clients/apiclient/types/ObjectParamAPI.ts | 4 ++-- clients/apiclient/types/ObservableAPI.ts | 4 ++-- clients/apiclient/types/PromiseAPI.ts | 4 ++-- components/webapi/component.go | 4 ++-- packages/webapi/controllers/corecontracts/controller.go | 2 +- tools/wasp-cli/chain/metadata.go | 2 +- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/clients/apiclient/CorecontractsApi.md b/clients/apiclient/CorecontractsApi.md index 91129b0716..036d8e77b5 100644 --- a/clients/apiclient/CorecontractsApi.md +++ b/clients/apiclient/CorecontractsApi.md @@ -965,7 +965,7 @@ No authorization required # **governanceGetChainInfo** > GovChainInfoResponse governanceGetChainInfo() -If you are using the common API functions, you most likely rather want to use \'/v1/chains/:chainID\' to get information about a chain. +If you are using the common API functions, you most likely rather want to use \'/v1/chain\' to get information about a chain. ### Example diff --git a/clients/apiclient/api/openapi.yaml b/clients/apiclient/api/openapi.yaml index b9e1724231..a4cd120870 100644 --- a/clients/apiclient/api/openapi.yaml +++ b/clients/apiclient/api/openapi.yaml @@ -823,7 +823,7 @@ paths: /v1/chain/core/governance/chaininfo: get: description: "If you are using the common API functions, you most likely rather\ - \ want to use '/v1/chains/:chainID' to get information about a chain." + \ want to use '/v1/chain' to get information about a chain." operationId: governanceGetChainInfo parameters: - description: Block index or trie root diff --git a/clients/apiclient/api_corecontracts.go b/clients/apiclient/api_corecontracts.go index 67d7fae555..b4558211c0 100644 --- a/clients/apiclient/api_corecontracts.go +++ b/clients/apiclient/api_corecontracts.go @@ -2096,7 +2096,7 @@ func (r ApiGovernanceGetChainInfoRequest) Execute() (*GovChainInfoResponse, *htt /* GovernanceGetChainInfo Get the chain info -If you are using the common API functions, you most likely rather want to use '/v1/chains/:chainID' to get information about a chain. +If you are using the common API functions, you most likely rather want to use '/v1/chain' to get information about a chain. @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @return ApiGovernanceGetChainInfoRequest diff --git a/clients/apiclient/apis/CorecontractsApi.ts b/clients/apiclient/apis/CorecontractsApi.ts index 018b6968e5..f594a45db2 100644 --- a/clients/apiclient/apis/CorecontractsApi.ts +++ b/clients/apiclient/apis/CorecontractsApi.ts @@ -634,7 +634,7 @@ export class CorecontractsApiRequestFactory extends BaseAPIRequestFactory { } /** - * If you are using the common API functions, you most likely rather want to use \'/v1/chains/:chainID\' to get information about a chain. + * If you are using the common API functions, you most likely rather want to use \'/v1/chain\' to get information about a chain. * Get the chain info * @param block Block index or trie root */ diff --git a/clients/apiclient/types/ObjectParamAPI.ts b/clients/apiclient/types/ObjectParamAPI.ts index b7aecad5a0..1094847ff6 100644 --- a/clients/apiclient/types/ObjectParamAPI.ts +++ b/clients/apiclient/types/ObjectParamAPI.ts @@ -1171,7 +1171,7 @@ export class ObjectCorecontractsApi { } /** - * If you are using the common API functions, you most likely rather want to use \'/v1/chains/:chainID\' to get information about a chain. + * If you are using the common API functions, you most likely rather want to use \'/v1/chain\' to get information about a chain. * Get the chain info * @param param the request object */ @@ -1180,7 +1180,7 @@ export class ObjectCorecontractsApi { } /** - * If you are using the common API functions, you most likely rather want to use \'/v1/chains/:chainID\' to get information about a chain. + * If you are using the common API functions, you most likely rather want to use \'/v1/chain\' to get information about a chain. * Get the chain info * @param param the request object */ diff --git a/clients/apiclient/types/ObservableAPI.ts b/clients/apiclient/types/ObservableAPI.ts index ae127cefd9..41fdc706aa 100644 --- a/clients/apiclient/types/ObservableAPI.ts +++ b/clients/apiclient/types/ObservableAPI.ts @@ -1326,7 +1326,7 @@ export class ObservableCorecontractsApi { } /** - * If you are using the common API functions, you most likely rather want to use \'/v1/chains/:chainID\' to get information about a chain. + * If you are using the common API functions, you most likely rather want to use \'/v1/chain\' to get information about a chain. * Get the chain info * @param [block] Block index or trie root */ @@ -1350,7 +1350,7 @@ export class ObservableCorecontractsApi { } /** - * If you are using the common API functions, you most likely rather want to use \'/v1/chains/:chainID\' to get information about a chain. + * If you are using the common API functions, you most likely rather want to use \'/v1/chain\' to get information about a chain. * Get the chain info * @param [block] Block index or trie root */ diff --git a/clients/apiclient/types/PromiseAPI.ts b/clients/apiclient/types/PromiseAPI.ts index d1919f31e3..61cec94b4a 100644 --- a/clients/apiclient/types/PromiseAPI.ts +++ b/clients/apiclient/types/PromiseAPI.ts @@ -830,7 +830,7 @@ export class PromiseCorecontractsApi { } /** - * If you are using the common API functions, you most likely rather want to use \'/v1/chains/:chainID\' to get information about a chain. + * If you are using the common API functions, you most likely rather want to use \'/v1/chain\' to get information about a chain. * Get the chain info * @param [block] Block index or trie root */ @@ -840,7 +840,7 @@ export class PromiseCorecontractsApi { } /** - * If you are using the common API functions, you most likely rather want to use \'/v1/chains/:chainID\' to get information about a chain. + * If you are using the common API functions, you most likely rather want to use \'/v1/chain\' to get information about a chain. * Get the chain info * @param [block] Block index or trie root */ diff --git a/components/webapi/component.go b/components/webapi/component.go index 4273416704..8934c0e69f 100644 --- a/components/webapi/component.go +++ b/components/webapi/component.go @@ -114,8 +114,8 @@ func NewEcho(params *ParametersWebAPI, metrics *metrics.ChainMetricsProvider, lo // publish metrics to prometheus component (that exposes a separate http server on another port) e.Use(func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { - if strings.HasPrefix(c.Path(), "/chains/") { - // ignore metrics for all requests not related to "chains/"" + if strings.HasPrefix(c.Path(), "/chain/") { + // ignore metrics for all requests not related to "chain/"" return next(c) } start := time.Now() diff --git a/packages/webapi/controllers/corecontracts/controller.go b/packages/webapi/controllers/corecontracts/controller.go index bbd9e8f66e..bd825678df 100644 --- a/packages/webapi/controllers/corecontracts/controller.go +++ b/packages/webapi/controllers/corecontracts/controller.go @@ -102,7 +102,7 @@ func (c *Controller) addGovernanceContractRoutes(api echoswagger.ApiGroup, mocke AddResponse(http.StatusUnauthorized, "Unauthorized (Wrong permissions, missing token)", authentication.ValidationError{}, nil). AddResponse(http.StatusOK, "The chain info", mocker.Get(models.GovChainInfoResponse{}), nil). SetOperationId("governanceGetChainInfo"). - SetDescription("If you are using the common API functions, you most likely rather want to use '/v1/chains/:chainID' to get information about a chain."). + SetDescription("If you are using the common API functions, you most likely rather want to use '/v1/chain' to get information about a chain."). SetSummary("Get the chain info") api.GET("chain/core/governance/chainadmin", c.getChainAdmin). diff --git a/tools/wasp-cli/chain/metadata.go b/tools/wasp-cli/chain/metadata.go index 96dee7baf3..d1b8833be6 100644 --- a/tools/wasp-cli/chain/metadata.go +++ b/tools/wasp-cli/chain/metadata.go @@ -106,7 +106,7 @@ func initMetadataCmd() *cobra.Command { ) cmd.Flags().BoolVarP(&useCliURL, "use-cli-url", "u", false, "use the configured cli wasp api url as public url (overrides --public-url)") - cmd.Flags().Var(&metadataArgs.PublicURL, "public-url", "the url leading to chain metadata f.e. (https://chain.network/v1/chains/:chainID)") + cmd.Flags().Var(&metadataArgs.PublicURL, "public-url", "the url leading to chain metadata f.e. (https://chain.network/v1/chain)") cmd.Flags().Var(&metadataArgs.EvmJSONRPCURL, "evm-rpc-url", "the public facing evm json rpc url") cmd.Flags().Var(&metadataArgs.EvmWSURL, "evm-ws-url", "the public facing evm websocket url")