diff --git a/bindings/generated/ccip/ccip/state_object/state_object.go b/bindings/generated/ccip/ccip/state_object/state_object.go index 32868237..0d546aa1 100644 --- a/bindings/generated/ccip/ccip/state_object/state_object.go +++ b/bindings/generated/ccip/ccip/state_object/state_object.go @@ -19,7 +19,7 @@ var ( _ = big.NewInt ) -const FunctionInfo = `[{"package":"ccip","module":"state_object","name":"accept_ownership","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"add","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"obj","type":"T"}]},{"package":"ccip","module":"state_object","name":"add_package_id","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"package_id","type":"address"}]},{"package":"ccip","module":"state_object","name":"borrow","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"borrow_mut","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"contains","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"execute_ownership_transfer","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"to","type":"address"}]},{"package":"ccip","module":"state_object","name":"execute_ownership_transfer_to_mcms","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"registry","type":"Registry"},{"name":"to","type":"address"}]},{"package":"ccip","module":"state_object","name":"has_pending_transfer","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"owner","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"owner_cap_id","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"pending_transfer_accepted","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"pending_transfer_from","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"pending_transfer_to","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"remove","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"ccip","module":"state_object","name":"remove_package_id","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"package_id","type":"address"}]},{"package":"ccip","module":"state_object","name":"transfer_ownership","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"to","type":"address"}]}]` +const FunctionInfo = `[{"package":"ccip","module":"state_object","name":"accept_ownership","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"add","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"obj","type":"T"}]},{"package":"ccip","module":"state_object","name":"add_package_id","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"package_id","type":"address"}]},{"package":"ccip","module":"state_object","name":"borrow","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"borrow_mut","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"contains","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"destroy_ccip_admin_proof","parameters":[{"name":"proof","type":"CCIPAdminProof"}]},{"package":"ccip","module":"state_object","name":"execute_ownership_transfer","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"to","type":"address"}]},{"package":"ccip","module":"state_object","name":"execute_ownership_transfer_to_mcms","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"registry","type":"Registry"},{"name":"to","type":"address"}]},{"package":"ccip","module":"state_object","name":"get_ccip_admin_proof_data","parameters":[{"name":"proof","type":"CCIPAdminProof"}]},{"package":"ccip","module":"state_object","name":"get_ccip_admin_proof_validated","parameters":[{"name":"proof","type":"CCIPAdminProof"}]},{"package":"ccip","module":"state_object","name":"has_pending_transfer","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"owner","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"owner_cap_id","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"pending_transfer_accepted","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"pending_transfer_from","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"pending_transfer_to","parameters":[{"name":"ref","type":"CCIPObjectRef"}]},{"package":"ccip","module":"state_object","name":"remove","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"ccip","module":"state_object","name":"remove_package_id","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"package_id","type":"address"}]},{"package":"ccip","module":"state_object","name":"set_ccip_admin_proof_validated","parameters":[{"name":"proof","type":"CCIPAdminProof"},{"name":"validated","type":"bool"}]},{"package":"ccip","module":"state_object","name":"transfer_ownership","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"},{"name":"to","type":"address"}]}]` type IStateObject interface { AddPackageId(ctx context.Context, opts *bind.CallOpts, ref bind.Object, ownerCap bind.Object, packageId string) (*models.SuiTransactionBlockResponse, error) @@ -48,6 +48,10 @@ type IStateObject interface { McmsAddAllowedModules(ctx context.Context, opts *bind.CallOpts, registry bind.Object, params bind.Object) (*models.SuiTransactionBlockResponse, error) McmsRemoveAllowedModules(ctx context.Context, opts *bind.CallOpts, registry bind.Object, params bind.Object) (*models.SuiTransactionBlockResponse, error) McmsProofEntrypoint(ctx context.Context, opts *bind.CallOpts, registry bind.Object, params bind.Object) (*models.SuiTransactionBlockResponse, error) + GetCcipAdminProofData(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof) (*models.SuiTransactionBlockResponse, error) + GetCcipAdminProofValidated(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof) (*models.SuiTransactionBlockResponse, error) + SetCcipAdminProofValidated(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof, validated bool) (*models.SuiTransactionBlockResponse, error) + DestroyCcipAdminProof(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof) (*models.SuiTransactionBlockResponse, error) DevInspect() IStateObjectDevInspect Encoder() StateObjectEncoder Bound() bind.IBoundContract @@ -66,6 +70,8 @@ type IStateObjectDevInspect interface { PendingTransferAccepted(ctx context.Context, opts *bind.CallOpts, ref bind.Object) (*bool, error) McmsCallback(ctx context.Context, opts *bind.CallOpts) (McmsCallback, error) McmsProofEntrypoint(ctx context.Context, opts *bind.CallOpts, registry bind.Object, params bind.Object) (CCIPAdminProof, error) + GetCcipAdminProofData(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof) ([]byte, error) + GetCcipAdminProofValidated(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof) (bool, error) } type StateObjectEncoder interface { @@ -121,6 +127,14 @@ type StateObjectEncoder interface { McmsRemoveAllowedModulesWithArgs(args ...any) (*bind.EncodedCall, error) McmsProofEntrypoint(registry bind.Object, params bind.Object) (*bind.EncodedCall, error) McmsProofEntrypointWithArgs(args ...any) (*bind.EncodedCall, error) + GetCcipAdminProofData(proof CCIPAdminProof) (*bind.EncodedCall, error) + GetCcipAdminProofDataWithArgs(args ...any) (*bind.EncodedCall, error) + GetCcipAdminProofValidated(proof CCIPAdminProof) (*bind.EncodedCall, error) + GetCcipAdminProofValidatedWithArgs(args ...any) (*bind.EncodedCall, error) + SetCcipAdminProofValidated(proof CCIPAdminProof, validated bool) (*bind.EncodedCall, error) + SetCcipAdminProofValidatedWithArgs(args ...any) (*bind.EncodedCall, error) + DestroyCcipAdminProof(proof CCIPAdminProof) (*bind.EncodedCall, error) + DestroyCcipAdminProofWithArgs(args ...any) (*bind.EncodedCall, error) } type StateObjectContract struct { @@ -181,6 +195,8 @@ type STATE_OBJECT struct { } type CCIPAdminProof struct { + Data []byte `move:"vector"` + Validated bool `move:"bool"` } type McmsCallback struct { @@ -613,6 +629,46 @@ func (c *StateObjectContract) McmsProofEntrypoint(ctx context.Context, opts *bin return c.ExecuteTransaction(ctx, opts, encoded) } +// GetCcipAdminProofData executes the get_ccip_admin_proof_data Move function. +func (c *StateObjectContract) GetCcipAdminProofData(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof) (*models.SuiTransactionBlockResponse, error) { + encoded, err := c.stateObjectEncoder.GetCcipAdminProofData(proof) + if err != nil { + return nil, fmt.Errorf("failed to encode function call: %w", err) + } + + return c.ExecuteTransaction(ctx, opts, encoded) +} + +// GetCcipAdminProofValidated executes the get_ccip_admin_proof_validated Move function. +func (c *StateObjectContract) GetCcipAdminProofValidated(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof) (*models.SuiTransactionBlockResponse, error) { + encoded, err := c.stateObjectEncoder.GetCcipAdminProofValidated(proof) + if err != nil { + return nil, fmt.Errorf("failed to encode function call: %w", err) + } + + return c.ExecuteTransaction(ctx, opts, encoded) +} + +// SetCcipAdminProofValidated executes the set_ccip_admin_proof_validated Move function. +func (c *StateObjectContract) SetCcipAdminProofValidated(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof, validated bool) (*models.SuiTransactionBlockResponse, error) { + encoded, err := c.stateObjectEncoder.SetCcipAdminProofValidated(proof, validated) + if err != nil { + return nil, fmt.Errorf("failed to encode function call: %w", err) + } + + return c.ExecuteTransaction(ctx, opts, encoded) +} + +// DestroyCcipAdminProof executes the destroy_ccip_admin_proof Move function. +func (c *StateObjectContract) DestroyCcipAdminProof(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof) (*models.SuiTransactionBlockResponse, error) { + encoded, err := c.stateObjectEncoder.DestroyCcipAdminProof(proof) + if err != nil { + return nil, fmt.Errorf("failed to encode function call: %w", err) + } + + return c.ExecuteTransaction(ctx, opts, encoded) +} + // OwnerCapId executes the owner_cap_id Move function using DevInspect to get return values. // // Returns: ID @@ -873,6 +929,50 @@ func (d *StateObjectDevInspect) McmsProofEntrypoint(ctx context.Context, opts *b return result, nil } +// GetCcipAdminProofData executes the get_ccip_admin_proof_data Move function using DevInspect to get return values. +// +// Returns: vector +func (d *StateObjectDevInspect) GetCcipAdminProofData(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof) ([]byte, error) { + encoded, err := d.contract.stateObjectEncoder.GetCcipAdminProofData(proof) + if err != nil { + return nil, fmt.Errorf("failed to encode function call: %w", err) + } + results, err := d.contract.Call(ctx, opts, encoded) + if err != nil { + return nil, err + } + if len(results) == 0 { + return nil, fmt.Errorf("no return value") + } + result, ok := results[0].([]byte) + if !ok { + return nil, fmt.Errorf("unexpected return type: expected []byte, got %T", results[0]) + } + return result, nil +} + +// GetCcipAdminProofValidated executes the get_ccip_admin_proof_validated Move function using DevInspect to get return values. +// +// Returns: bool +func (d *StateObjectDevInspect) GetCcipAdminProofValidated(ctx context.Context, opts *bind.CallOpts, proof CCIPAdminProof) (bool, error) { + encoded, err := d.contract.stateObjectEncoder.GetCcipAdminProofValidated(proof) + if err != nil { + return false, fmt.Errorf("failed to encode function call: %w", err) + } + results, err := d.contract.Call(ctx, opts, encoded) + if err != nil { + return false, err + } + if len(results) == 0 { + return false, fmt.Errorf("no return value") + } + result, ok := results[0].(bool) + if !ok { + return false, fmt.Errorf("unexpected return type: expected bool, got %T", results[0]) + } + return result, nil +} + type stateObjectEncoder struct { *bind.BoundContract } @@ -1695,3 +1795,118 @@ func (c stateObjectEncoder) McmsProofEntrypointWithArgs(args ...any) (*bind.Enco "ccip::state_object::CCIPAdminProof", }) } + +// GetCcipAdminProofData encodes a call to the get_ccip_admin_proof_data Move function. +func (c stateObjectEncoder) GetCcipAdminProofData(proof CCIPAdminProof) (*bind.EncodedCall, error) { + typeArgsList := []string{} + typeParamsList := []string{} + return c.EncodeCallArgsWithGenerics("get_ccip_admin_proof_data", typeArgsList, typeParamsList, []string{ + "&CCIPAdminProof", + }, []any{ + proof, + }, []string{ + "vector", + }) +} + +// GetCcipAdminProofDataWithArgs encodes a call to the get_ccip_admin_proof_data Move function using arbitrary arguments. +// This method allows passing both regular values and transaction.Argument values for PTB chaining. +func (c stateObjectEncoder) GetCcipAdminProofDataWithArgs(args ...any) (*bind.EncodedCall, error) { + expectedParams := []string{ + "&CCIPAdminProof", + } + + if len(args) != len(expectedParams) { + return nil, fmt.Errorf("expected %d arguments, got %d", len(expectedParams), len(args)) + } + typeArgsList := []string{} + typeParamsList := []string{} + return c.EncodeCallArgsWithGenerics("get_ccip_admin_proof_data", typeArgsList, typeParamsList, expectedParams, args, []string{ + "vector", + }) +} + +// GetCcipAdminProofValidated encodes a call to the get_ccip_admin_proof_validated Move function. +func (c stateObjectEncoder) GetCcipAdminProofValidated(proof CCIPAdminProof) (*bind.EncodedCall, error) { + typeArgsList := []string{} + typeParamsList := []string{} + return c.EncodeCallArgsWithGenerics("get_ccip_admin_proof_validated", typeArgsList, typeParamsList, []string{ + "&CCIPAdminProof", + }, []any{ + proof, + }, []string{ + "bool", + }) +} + +// GetCcipAdminProofValidatedWithArgs encodes a call to the get_ccip_admin_proof_validated Move function using arbitrary arguments. +// This method allows passing both regular values and transaction.Argument values for PTB chaining. +func (c stateObjectEncoder) GetCcipAdminProofValidatedWithArgs(args ...any) (*bind.EncodedCall, error) { + expectedParams := []string{ + "&CCIPAdminProof", + } + + if len(args) != len(expectedParams) { + return nil, fmt.Errorf("expected %d arguments, got %d", len(expectedParams), len(args)) + } + typeArgsList := []string{} + typeParamsList := []string{} + return c.EncodeCallArgsWithGenerics("get_ccip_admin_proof_validated", typeArgsList, typeParamsList, expectedParams, args, []string{ + "bool", + }) +} + +// SetCcipAdminProofValidated encodes a call to the set_ccip_admin_proof_validated Move function. +func (c stateObjectEncoder) SetCcipAdminProofValidated(proof CCIPAdminProof, validated bool) (*bind.EncodedCall, error) { + typeArgsList := []string{} + typeParamsList := []string{} + return c.EncodeCallArgsWithGenerics("set_ccip_admin_proof_validated", typeArgsList, typeParamsList, []string{ + "&mut CCIPAdminProof", + "bool", + }, []any{ + proof, + validated, + }, nil) +} + +// SetCcipAdminProofValidatedWithArgs encodes a call to the set_ccip_admin_proof_validated Move function using arbitrary arguments. +// This method allows passing both regular values and transaction.Argument values for PTB chaining. +func (c stateObjectEncoder) SetCcipAdminProofValidatedWithArgs(args ...any) (*bind.EncodedCall, error) { + expectedParams := []string{ + "&mut CCIPAdminProof", + "bool", + } + + if len(args) != len(expectedParams) { + return nil, fmt.Errorf("expected %d arguments, got %d", len(expectedParams), len(args)) + } + typeArgsList := []string{} + typeParamsList := []string{} + return c.EncodeCallArgsWithGenerics("set_ccip_admin_proof_validated", typeArgsList, typeParamsList, expectedParams, args, nil) +} + +// DestroyCcipAdminProof encodes a call to the destroy_ccip_admin_proof Move function. +func (c stateObjectEncoder) DestroyCcipAdminProof(proof CCIPAdminProof) (*bind.EncodedCall, error) { + typeArgsList := []string{} + typeParamsList := []string{} + return c.EncodeCallArgsWithGenerics("destroy_ccip_admin_proof", typeArgsList, typeParamsList, []string{ + "ccip::state_object::CCIPAdminProof", + }, []any{ + proof, + }, nil) +} + +// DestroyCcipAdminProofWithArgs encodes a call to the destroy_ccip_admin_proof Move function using arbitrary arguments. +// This method allows passing both regular values and transaction.Argument values for PTB chaining. +func (c stateObjectEncoder) DestroyCcipAdminProofWithArgs(args ...any) (*bind.EncodedCall, error) { + expectedParams := []string{ + "ccip::state_object::CCIPAdminProof", + } + + if len(args) != len(expectedParams) { + return nil, fmt.Errorf("expected %d arguments, got %d", len(expectedParams), len(args)) + } + typeArgsList := []string{} + typeParamsList := []string{} + return c.EncodeCallArgsWithGenerics("destroy_ccip_admin_proof", typeArgsList, typeParamsList, expectedParams, args, nil) +} diff --git a/bindings/generated/ccip/ccip/token_admin_registry/token_admin_registry.go b/bindings/generated/ccip/ccip/token_admin_registry/token_admin_registry.go index 6f50f94c..19745e84 100644 --- a/bindings/generated/ccip/ccip/token_admin_registry/token_admin_registry.go +++ b/bindings/generated/ccip/ccip/token_admin_registry/token_admin_registry.go @@ -19,7 +19,7 @@ var ( _ = big.NewInt ) -const FunctionInfo = `[{"package":"ccip","module":"token_admin_registry","name":"accept_admin_role","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"get_all_configured_tokens","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"start_key","type":"address"},{"name":"max_count","type":"u64"}]},{"package":"ccip","module":"token_admin_registry","name":"get_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"get_pools","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_addresses","type":"vector
"}]},{"package":"ccip","module":"token_admin_registry","name":"get_token_config","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"get_token_config_data","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"get_token_config_struct","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"initialize","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"ccip","module":"token_admin_registry","name":"is_administrator","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"},{"name":"administrator","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"register_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"_","type":"TreasuryCap"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"initial_administrator","type":"address"},{"name":"lock_or_burn_params","type":"vector
"},{"name":"release_or_mint_params","type":"vector
"},{"name":"_proof","type":"TypeProof"}]},{"package":"ccip","module":"token_admin_registry","name":"register_pool_by_admin","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"_","type":"state_object::CCIPAdminProof"},{"name":"coin_metadata_address","type":"address"},{"name":"token_pool_package_id","type":"address"},{"name":"token_pool_module","type":"0x1::string::String"},{"name":"token_type","type":"ascii::String"},{"name":"initial_administrator","type":"address"},{"name":"token_pool_type_proof","type":"ascii::String"},{"name":"lock_or_burn_params","type":"vector
"},{"name":"release_or_mint_params","type":"vector
"}]},{"package":"ccip","module":"token_admin_registry","name":"set_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"},{"name":"lock_or_burn_params","type":"vector
"},{"name":"release_or_mint_params","type":"vector
"},{"name":"_","type":"TypeProof"}]},{"package":"ccip","module":"token_admin_registry","name":"transfer_admin_role","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"},{"name":"new_admin","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"type_and_version","parameters":null},{"package":"ccip","module":"token_admin_registry","name":"unregister_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]}]` +const FunctionInfo = `[{"package":"ccip","module":"token_admin_registry","name":"accept_admin_role","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"get_all_configured_tokens","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"start_key","type":"address"},{"name":"max_count","type":"u64"}]},{"package":"ccip","module":"token_admin_registry","name":"get_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"get_pools","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_addresses","type":"vector
"}]},{"package":"ccip","module":"token_admin_registry","name":"get_token_config","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"get_token_config_data","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"get_token_config_struct","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"initialize","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"ccip","module":"token_admin_registry","name":"is_administrator","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"},{"name":"administrator","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"register_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"_","type":"TreasuryCap"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"initial_administrator","type":"address"},{"name":"lock_or_burn_params","type":"vector
"},{"name":"release_or_mint_params","type":"vector
"},{"name":"_proof","type":"TypeProof"}]},{"package":"ccip","module":"token_admin_registry","name":"register_pool_by_admin","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"ccip_admin_proof","type":"state_object::CCIPAdminProof"},{"name":"coin_metadata_address","type":"address"},{"name":"token_pool_package_id","type":"address"},{"name":"token_pool_module","type":"0x1::string::String"},{"name":"token_type","type":"ascii::String"},{"name":"initial_administrator","type":"address"},{"name":"token_pool_type_proof","type":"ascii::String"},{"name":"lock_or_burn_params","type":"vector
"},{"name":"release_or_mint_params","type":"vector
"}]},{"package":"ccip","module":"token_admin_registry","name":"set_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"},{"name":"lock_or_burn_params","type":"vector
"},{"name":"release_or_mint_params","type":"vector
"},{"name":"_","type":"TypeProof"}]},{"package":"ccip","module":"token_admin_registry","name":"transfer_admin_role","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"},{"name":"new_admin","type":"address"}]},{"package":"ccip","module":"token_admin_registry","name":"type_and_version","parameters":null},{"package":"ccip","module":"token_admin_registry","name":"unregister_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata_address","type":"address"}]}]` type ITokenAdminRegistry interface { TypeAndVersion(ctx context.Context, opts *bind.CallOpts) (*models.SuiTransactionBlockResponse, error) @@ -31,7 +31,7 @@ type ITokenAdminRegistry interface { GetTokenConfigData(ctx context.Context, opts *bind.CallOpts, ref bind.Object, coinMetadataAddress string) (*models.SuiTransactionBlockResponse, error) GetAllConfiguredTokens(ctx context.Context, opts *bind.CallOpts, ref bind.Object, startKey string, maxCount uint64) (*models.SuiTransactionBlockResponse, error) RegisterPool(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, param bind.Object, coinMetadata bind.Object, initialAdministrator string, lockOrBurnParams []string, releaseOrMintParams []string, proof bind.Object) (*models.SuiTransactionBlockResponse, error) - RegisterPoolByAdmin(ctx context.Context, opts *bind.CallOpts, ref bind.Object, param bind.Object, coinMetadataAddress string, tokenPoolPackageId string, tokenPoolModule string, tokenType string, initialAdministrator string, tokenPoolTypeProof string, lockOrBurnParams []string, releaseOrMintParams []string) (*models.SuiTransactionBlockResponse, error) + RegisterPoolByAdmin(ctx context.Context, opts *bind.CallOpts, ref bind.Object, ccipAdminProof bind.Object, coinMetadataAddress string, tokenPoolPackageId string, tokenPoolModule string, tokenType string, initialAdministrator string, tokenPoolTypeProof string, lockOrBurnParams []string, releaseOrMintParams []string) (*models.SuiTransactionBlockResponse, error) UnregisterPool(ctx context.Context, opts *bind.CallOpts, ref bind.Object, coinMetadataAddress string) (*models.SuiTransactionBlockResponse, error) SetPool(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, coinMetadataAddress string, lockOrBurnParams []string, releaseOrMintParams []string, param bind.Object) (*models.SuiTransactionBlockResponse, error) TransferAdminRole(ctx context.Context, opts *bind.CallOpts, ref bind.Object, coinMetadataAddress string, newAdmin string) (*models.SuiTransactionBlockResponse, error) @@ -76,7 +76,7 @@ type TokenAdminRegistryEncoder interface { GetAllConfiguredTokensWithArgs(args ...any) (*bind.EncodedCall, error) RegisterPool(typeArgs []string, ref bind.Object, param bind.Object, coinMetadata bind.Object, initialAdministrator string, lockOrBurnParams []string, releaseOrMintParams []string, proof bind.Object) (*bind.EncodedCall, error) RegisterPoolWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) - RegisterPoolByAdmin(ref bind.Object, param bind.Object, coinMetadataAddress string, tokenPoolPackageId string, tokenPoolModule string, tokenType string, initialAdministrator string, tokenPoolTypeProof string, lockOrBurnParams []string, releaseOrMintParams []string) (*bind.EncodedCall, error) + RegisterPoolByAdmin(ref bind.Object, ccipAdminProof bind.Object, coinMetadataAddress string, tokenPoolPackageId string, tokenPoolModule string, tokenType string, initialAdministrator string, tokenPoolTypeProof string, lockOrBurnParams []string, releaseOrMintParams []string) (*bind.EncodedCall, error) RegisterPoolByAdminWithArgs(args ...any) (*bind.EncodedCall, error) UnregisterPool(ref bind.Object, coinMetadataAddress string) (*bind.EncodedCall, error) UnregisterPoolWithArgs(args ...any) (*bind.EncodedCall, error) @@ -610,8 +610,8 @@ func (c *TokenAdminRegistryContract) RegisterPool(ctx context.Context, opts *bin } // RegisterPoolByAdmin executes the register_pool_by_admin Move function. -func (c *TokenAdminRegistryContract) RegisterPoolByAdmin(ctx context.Context, opts *bind.CallOpts, ref bind.Object, param bind.Object, coinMetadataAddress string, tokenPoolPackageId string, tokenPoolModule string, tokenType string, initialAdministrator string, tokenPoolTypeProof string, lockOrBurnParams []string, releaseOrMintParams []string) (*models.SuiTransactionBlockResponse, error) { - encoded, err := c.tokenAdminRegistryEncoder.RegisterPoolByAdmin(ref, param, coinMetadataAddress, tokenPoolPackageId, tokenPoolModule, tokenType, initialAdministrator, tokenPoolTypeProof, lockOrBurnParams, releaseOrMintParams) +func (c *TokenAdminRegistryContract) RegisterPoolByAdmin(ctx context.Context, opts *bind.CallOpts, ref bind.Object, ccipAdminProof bind.Object, coinMetadataAddress string, tokenPoolPackageId string, tokenPoolModule string, tokenType string, initialAdministrator string, tokenPoolTypeProof string, lockOrBurnParams []string, releaseOrMintParams []string) (*models.SuiTransactionBlockResponse, error) { + encoded, err := c.tokenAdminRegistryEncoder.RegisterPoolByAdmin(ref, ccipAdminProof, coinMetadataAddress, tokenPoolPackageId, tokenPoolModule, tokenType, initialAdministrator, tokenPoolTypeProof, lockOrBurnParams, releaseOrMintParams) if err != nil { return nil, fmt.Errorf("failed to encode function call: %w", err) } @@ -1200,7 +1200,7 @@ func (c tokenAdminRegistryEncoder) RegisterPoolWithArgs(typeArgs []string, args } // RegisterPoolByAdmin encodes a call to the register_pool_by_admin Move function. -func (c tokenAdminRegistryEncoder) RegisterPoolByAdmin(ref bind.Object, param bind.Object, coinMetadataAddress string, tokenPoolPackageId string, tokenPoolModule string, tokenType string, initialAdministrator string, tokenPoolTypeProof string, lockOrBurnParams []string, releaseOrMintParams []string) (*bind.EncodedCall, error) { +func (c tokenAdminRegistryEncoder) RegisterPoolByAdmin(ref bind.Object, ccipAdminProof bind.Object, coinMetadataAddress string, tokenPoolPackageId string, tokenPoolModule string, tokenType string, initialAdministrator string, tokenPoolTypeProof string, lockOrBurnParams []string, releaseOrMintParams []string) (*bind.EncodedCall, error) { typeArgsList := []string{} typeParamsList := []string{} return c.EncodeCallArgsWithGenerics("register_pool_by_admin", typeArgsList, typeParamsList, []string{ @@ -1216,7 +1216,7 @@ func (c tokenAdminRegistryEncoder) RegisterPoolByAdmin(ref bind.Object, param bi "vector
", }, []any{ ref, - param, + ccipAdminProof, coinMetadataAddress, tokenPoolPackageId, tokenPoolModule, diff --git a/bindings/generated/ccip/ccip_token_pools/burn_mint_token_pool/burn_mint_token_pool.go b/bindings/generated/ccip/ccip_token_pools/burn_mint_token_pool/burn_mint_token_pool.go index db1cdbfe..8dbccbaf 100644 --- a/bindings/generated/ccip/ccip_token_pools/burn_mint_token_pool/burn_mint_token_pool.go +++ b/bindings/generated/ccip/ccip_token_pools/burn_mint_token_pool/burn_mint_token_pool.go @@ -19,12 +19,12 @@ var ( _ = big.NewInt ) -const FunctionInfo = `[{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"accept_ownership","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"accept_ownership_from_object","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"from","type":"sui::object::UID"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"add_remote_pool","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"apply_allowlist_updates","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"removes","type":"vector
"},{"name":"adds","type":"vector
"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"apply_chain_updates","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selectors_to_remove","type":"vector"},{"name":"remote_chain_selectors_to_add","type":"vector"},{"name":"remote_pool_addresses_to_add","type":"vector>>"},{"name":"remote_token_addresses_to_add","type":"vector>"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"destroy_token_pool","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"execute_ownership_transfer","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"BurnMintTokenPoolState"},{"name":"to","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"execute_ownership_transfer_to_mcms","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"BurnMintTokenPoolState"},{"name":"registry","type":"Registry"},{"name":"to","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_allowlist","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_allowlist_enabled","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_remote_pools","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_remote_token","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_supported_chains","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_token","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_token_decimals","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"has_pending_transfer","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"initialize","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"treasury_cap","type":"TreasuryCap"},{"name":"token_pool_administrator","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"initialize_by_ccip_admin","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"ccip_admin_proof","type":"state_object::CCIPAdminProof"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"treasury_cap","type":"TreasuryCap"},{"name":"token_pool_administrator","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"is_remote_pool","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"is_supported_chain","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"lock_or_burn","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"token_transfer_params","type":"onramp_sh::TokenTransferParams"},{"name":"c","type":"Coin"},{"name":"remote_chain_selector","type":"u64"},{"name":"clock","type":"Clock"},{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"owner","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"pending_transfer_accepted","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"pending_transfer_from","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"pending_transfer_to","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"release_or_mint","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"receiver_params","type":"offramp_sh::ReceiverParams"},{"name":"clock","type":"Clock"},{"name":"pool","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"remove_remote_pool","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"set_allowlist_enabled","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"enabled","type":"bool"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"set_chain_rate_limiter_config","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selector","type":"u64"},{"name":"outbound_is_enabled","type":"bool"},{"name":"outbound_capacity","type":"u64"},{"name":"outbound_rate","type":"u64"},{"name":"inbound_is_enabled","type":"bool"},{"name":"inbound_capacity","type":"u64"},{"name":"inbound_rate","type":"u64"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"set_chain_rate_limiter_configs","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selectors","type":"vector"},{"name":"outbound_is_enableds","type":"vector"},{"name":"outbound_capacities","type":"vector"},{"name":"outbound_rates","type":"vector"},{"name":"inbound_is_enableds","type":"vector"},{"name":"inbound_capacities","type":"vector"},{"name":"inbound_rates","type":"vector"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"set_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"coin_metadata_address","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"transfer_ownership","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"new_owner","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"type_and_version","parameters":null}]` +const FunctionInfo = `[{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"accept_ownership","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"accept_ownership_from_object","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"from","type":"sui::object::UID"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"add_remote_pool","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"apply_allowlist_updates","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"removes","type":"vector
"},{"name":"adds","type":"vector
"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"apply_chain_updates","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selectors_to_remove","type":"vector"},{"name":"remote_chain_selectors_to_add","type":"vector"},{"name":"remote_pool_addresses_to_add","type":"vector>>"},{"name":"remote_token_addresses_to_add","type":"vector>"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"destroy_token_pool","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"execute_ownership_transfer","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"BurnMintTokenPoolState"},{"name":"to","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"execute_ownership_transfer_to_mcms","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"BurnMintTokenPoolState"},{"name":"registry","type":"Registry"},{"name":"to","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_allowlist","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_allowlist_enabled","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_remote_pools","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_remote_token","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_supported_chains","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_token","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"get_token_decimals","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"has_pending_transfer","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"initialize","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"treasury_cap","type":"TreasuryCap"},{"name":"token_pool_administrator","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"initialize_by_ccip_admin","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"ccip_admin_proof","type":"state_object::CCIPAdminProof"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"treasury_cap","type":"TreasuryCap"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"is_remote_pool","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"is_supported_chain","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"lock_or_burn","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"token_transfer_params","type":"onramp_sh::TokenTransferParams"},{"name":"c","type":"Coin"},{"name":"remote_chain_selector","type":"u64"},{"name":"clock","type":"Clock"},{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"owner","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"pending_transfer_accepted","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"pending_transfer_from","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"pending_transfer_to","parameters":[{"name":"state","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"release_or_mint","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"receiver_params","type":"offramp_sh::ReceiverParams"},{"name":"clock","type":"Clock"},{"name":"pool","type":"BurnMintTokenPoolState"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"remove_remote_pool","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"set_allowlist_enabled","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"enabled","type":"bool"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"set_chain_rate_limiter_config","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selector","type":"u64"},{"name":"outbound_is_enabled","type":"bool"},{"name":"outbound_capacity","type":"u64"},{"name":"outbound_rate","type":"u64"},{"name":"inbound_is_enabled","type":"bool"},{"name":"inbound_capacity","type":"u64"},{"name":"inbound_rate","type":"u64"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"set_chain_rate_limiter_configs","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selectors","type":"vector"},{"name":"outbound_is_enableds","type":"vector"},{"name":"outbound_capacities","type":"vector"},{"name":"outbound_rates","type":"vector"},{"name":"inbound_is_enableds","type":"vector"},{"name":"inbound_capacities","type":"vector"},{"name":"inbound_rates","type":"vector"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"set_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"coin_metadata_address","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"transfer_ownership","parameters":[{"name":"state","type":"BurnMintTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"new_owner","type":"address"}]},{"package":"burn_mint_token_pool","module":"burn_mint_token_pool","name":"type_and_version","parameters":null}]` type IBurnMintTokenPool interface { TypeAndVersion(ctx context.Context, opts *bind.CallOpts) (*models.SuiTransactionBlockResponse, error) Initialize(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, coinMetadata bind.Object, treasuryCap bind.Object, tokenPoolAdministrator string) (*models.SuiTransactionBlockResponse, error) - InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, treasuryCap bind.Object, tokenPoolAdministrator string) (*models.SuiTransactionBlockResponse, error) + InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, treasuryCap bind.Object) (*models.SuiTransactionBlockResponse, error) SetPool(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, state bind.Object, ownerCap bind.Object, coinMetadataAddress string) (*models.SuiTransactionBlockResponse, error) GetToken(ctx context.Context, opts *bind.CallOpts, typeArgs []string, state bind.Object) (*models.SuiTransactionBlockResponse, error) GetTokenDecimals(ctx context.Context, opts *bind.CallOpts, typeArgs []string, state bind.Object) (*models.SuiTransactionBlockResponse, error) @@ -98,7 +98,7 @@ type BurnMintTokenPoolEncoder interface { TypeAndVersionWithArgs(args ...any) (*bind.EncodedCall, error) Initialize(typeArgs []string, ref bind.Object, coinMetadata bind.Object, treasuryCap bind.Object, tokenPoolAdministrator string) (*bind.EncodedCall, error) InitializeWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) - InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, treasuryCap bind.Object, tokenPoolAdministrator string) (*bind.EncodedCall, error) + InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, treasuryCap bind.Object) (*bind.EncodedCall, error) InitializeByCcipAdminWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) SetPool(typeArgs []string, ref bind.Object, state bind.Object, ownerCap bind.Object, coinMetadataAddress string) (*bind.EncodedCall, error) SetPoolWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) @@ -317,8 +317,8 @@ func (c *BurnMintTokenPoolContract) Initialize(ctx context.Context, opts *bind.C } // InitializeByCcipAdmin executes the initialize_by_ccip_admin Move function. -func (c *BurnMintTokenPoolContract) InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, treasuryCap bind.Object, tokenPoolAdministrator string) (*models.SuiTransactionBlockResponse, error) { - encoded, err := c.burnMintTokenPoolEncoder.InitializeByCcipAdmin(typeArgs, ref, ccipAdminProof, coinMetadata, treasuryCap, tokenPoolAdministrator) +func (c *BurnMintTokenPoolContract) InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, treasuryCap bind.Object) (*models.SuiTransactionBlockResponse, error) { + encoded, err := c.burnMintTokenPoolEncoder.InitializeByCcipAdmin(typeArgs, ref, ccipAdminProof, coinMetadata, treasuryCap) if err != nil { return nil, fmt.Errorf("failed to encode function call: %w", err) } @@ -1182,7 +1182,7 @@ func (c burnMintTokenPoolEncoder) InitializeWithArgs(typeArgs []string, args ... } // InitializeByCcipAdmin encodes a call to the initialize_by_ccip_admin Move function. -func (c burnMintTokenPoolEncoder) InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, treasuryCap bind.Object, tokenPoolAdministrator string) (*bind.EncodedCall, error) { +func (c burnMintTokenPoolEncoder) InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, treasuryCap bind.Object) (*bind.EncodedCall, error) { typeArgsList := typeArgs typeParamsList := []string{ "T", @@ -1192,13 +1192,11 @@ func (c burnMintTokenPoolEncoder) InitializeByCcipAdmin(typeArgs []string, ref b "state_object::CCIPAdminProof", "&CoinMetadata", "TreasuryCap", - "address", }, []any{ ref, ccipAdminProof, coinMetadata, treasuryCap, - tokenPoolAdministrator, }, nil) } @@ -1210,7 +1208,6 @@ func (c burnMintTokenPoolEncoder) InitializeByCcipAdminWithArgs(typeArgs []strin "state_object::CCIPAdminProof", "&CoinMetadata", "TreasuryCap", - "address", } if len(args) != len(expectedParams) { diff --git a/bindings/generated/ccip/ccip_token_pools/lock_release_token_pool/lock_release_token_pool.go b/bindings/generated/ccip/ccip_token_pools/lock_release_token_pool/lock_release_token_pool.go index 05d5e823..ad16b7cd 100644 --- a/bindings/generated/ccip/ccip_token_pools/lock_release_token_pool/lock_release_token_pool.go +++ b/bindings/generated/ccip/ccip_token_pools/lock_release_token_pool/lock_release_token_pool.go @@ -19,12 +19,12 @@ var ( _ = big.NewInt ) -const FunctionInfo = `[{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"accept_ownership","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"accept_ownership_from_object","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"from","type":"sui::object::UID"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"add_remote_pool","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"apply_allowlist_updates","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"removes","type":"vector
"},{"name":"adds","type":"vector
"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"apply_chain_updates","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selectors_to_remove","type":"vector"},{"name":"remote_chain_selectors_to_add","type":"vector"},{"name":"remote_pool_addresses_to_add","type":"vector>>"},{"name":"remote_token_addresses_to_add","type":"vector>"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"destroy_token_pool","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"execute_ownership_transfer","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"to","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"execute_ownership_transfer_to_mcms","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"registry","type":"Registry"},{"name":"to","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_allowlist","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_allowlist_enabled","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_balance","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_rebalancer","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_remote_pools","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_remote_token","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_supported_chains","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_token","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_token_decimals","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"has_pending_transfer","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"initialize","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"treasury_cap","type":"TreasuryCap"},{"name":"token_pool_administrator","type":"address"},{"name":"rebalancer","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"initialize_by_ccip_admin","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"ccip_admin_proof","type":"state_object::CCIPAdminProof"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"token_pool_administrator","type":"address"},{"name":"rebalancer","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"is_remote_pool","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"is_supported_chain","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"lock_or_burn","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"token_transfer_params","type":"onramp_sh::TokenTransferParams"},{"name":"c","type":"Coin"},{"name":"remote_chain_selector","type":"u64"},{"name":"clock","type":"Clock"},{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"owner","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"pending_transfer_accepted","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"pending_transfer_from","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"pending_transfer_to","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"provide_liquidity","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"c","type":"Coin"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"release_or_mint","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"receiver_params","type":"offramp_sh::ReceiverParams"},{"name":"clock","type":"Clock"},{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"remove_remote_pool","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"set_allowlist_enabled","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"enabled","type":"bool"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"set_chain_rate_limiter_config","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selector","type":"u64"},{"name":"outbound_is_enabled","type":"bool"},{"name":"outbound_capacity","type":"u64"},{"name":"outbound_rate","type":"u64"},{"name":"inbound_is_enabled","type":"bool"},{"name":"inbound_capacity","type":"u64"},{"name":"inbound_rate","type":"u64"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"set_chain_rate_limiter_configs","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selectors","type":"vector"},{"name":"outbound_is_enableds","type":"vector"},{"name":"outbound_capacities","type":"vector"},{"name":"outbound_rates","type":"vector"},{"name":"inbound_is_enableds","type":"vector"},{"name":"inbound_capacities","type":"vector"},{"name":"inbound_rates","type":"vector"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"set_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"coin_metadata_address","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"set_rebalancer","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"rebalancer","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"transfer_ownership","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"new_owner","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"type_and_version","parameters":null},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"withdraw_liquidity","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"amount","type":"u64"}]}]` +const FunctionInfo = `[{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"accept_ownership","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"accept_ownership_from_object","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"from","type":"sui::object::UID"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"add_remote_pool","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"apply_allowlist_updates","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"removes","type":"vector
"},{"name":"adds","type":"vector
"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"apply_chain_updates","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selectors_to_remove","type":"vector"},{"name":"remote_chain_selectors_to_add","type":"vector"},{"name":"remote_pool_addresses_to_add","type":"vector>>"},{"name":"remote_token_addresses_to_add","type":"vector>"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"destroy_token_pool","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"execute_ownership_transfer","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"to","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"execute_ownership_transfer_to_mcms","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"registry","type":"Registry"},{"name":"to","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_allowlist","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_allowlist_enabled","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_balance","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_rebalancer","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_remote_pools","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_remote_token","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_supported_chains","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_token","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"get_token_decimals","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"has_pending_transfer","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"initialize","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"treasury_cap","type":"TreasuryCap"},{"name":"token_pool_administrator","type":"address"},{"name":"rebalancer","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"initialize_by_ccip_admin","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"ccip_admin_proof","type":"state_object::CCIPAdminProof"},{"name":"coin_metadata","type":"CoinMetadata"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"is_remote_pool","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"is_supported_chain","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"lock_or_burn","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"token_transfer_params","type":"onramp_sh::TokenTransferParams"},{"name":"c","type":"Coin"},{"name":"remote_chain_selector","type":"u64"},{"name":"clock","type":"Clock"},{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"owner","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"pending_transfer_accepted","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"pending_transfer_from","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"pending_transfer_to","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"provide_liquidity","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"c","type":"Coin"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"release_or_mint","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"receiver_params","type":"offramp_sh::ReceiverParams"},{"name":"clock","type":"Clock"},{"name":"state","type":"LockReleaseTokenPoolState"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"remove_remote_pool","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"set_allowlist_enabled","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"enabled","type":"bool"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"set_chain_rate_limiter_config","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selector","type":"u64"},{"name":"outbound_is_enabled","type":"bool"},{"name":"outbound_capacity","type":"u64"},{"name":"outbound_rate","type":"u64"},{"name":"inbound_is_enabled","type":"bool"},{"name":"inbound_capacity","type":"u64"},{"name":"inbound_rate","type":"u64"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"set_chain_rate_limiter_configs","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selectors","type":"vector"},{"name":"outbound_is_enableds","type":"vector"},{"name":"outbound_capacities","type":"vector"},{"name":"outbound_rates","type":"vector"},{"name":"inbound_is_enableds","type":"vector"},{"name":"inbound_capacities","type":"vector"},{"name":"inbound_rates","type":"vector"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"set_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"coin_metadata_address","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"set_rebalancer","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"rebalancer","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"transfer_ownership","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"new_owner","type":"address"}]},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"type_and_version","parameters":null},{"package":"lock_release_token_pool","module":"lock_release_token_pool","name":"withdraw_liquidity","parameters":[{"name":"state","type":"LockReleaseTokenPoolState"},{"name":"amount","type":"u64"}]}]` type ILockReleaseTokenPool interface { TypeAndVersion(ctx context.Context, opts *bind.CallOpts) (*models.SuiTransactionBlockResponse, error) Initialize(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, coinMetadata bind.Object, treasuryCap bind.Object, tokenPoolAdministrator string, rebalancer string) (*models.SuiTransactionBlockResponse, error) - InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, tokenPoolAdministrator string, rebalancer string) (*models.SuiTransactionBlockResponse, error) + InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object) (*models.SuiTransactionBlockResponse, error) SetPool(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, state bind.Object, ownerCap bind.Object, coinMetadataAddress string) (*models.SuiTransactionBlockResponse, error) GetToken(ctx context.Context, opts *bind.CallOpts, typeArgs []string, state bind.Object) (*models.SuiTransactionBlockResponse, error) GetTokenDecimals(ctx context.Context, opts *bind.CallOpts, typeArgs []string, state bind.Object) (*models.SuiTransactionBlockResponse, error) @@ -107,7 +107,7 @@ type LockReleaseTokenPoolEncoder interface { TypeAndVersionWithArgs(args ...any) (*bind.EncodedCall, error) Initialize(typeArgs []string, ref bind.Object, coinMetadata bind.Object, treasuryCap bind.Object, tokenPoolAdministrator string, rebalancer string) (*bind.EncodedCall, error) InitializeWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) - InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, tokenPoolAdministrator string, rebalancer string) (*bind.EncodedCall, error) + InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object) (*bind.EncodedCall, error) InitializeByCcipAdminWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) SetPool(typeArgs []string, ref bind.Object, state bind.Object, ownerCap bind.Object, coinMetadataAddress string) (*bind.EncodedCall, error) SetPoolWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) @@ -372,8 +372,8 @@ func (c *LockReleaseTokenPoolContract) Initialize(ctx context.Context, opts *bin } // InitializeByCcipAdmin executes the initialize_by_ccip_admin Move function. -func (c *LockReleaseTokenPoolContract) InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, tokenPoolAdministrator string, rebalancer string) (*models.SuiTransactionBlockResponse, error) { - encoded, err := c.lockReleaseTokenPoolEncoder.InitializeByCcipAdmin(typeArgs, ref, ccipAdminProof, coinMetadata, tokenPoolAdministrator, rebalancer) +func (c *LockReleaseTokenPoolContract) InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object) (*models.SuiTransactionBlockResponse, error) { + encoded, err := c.lockReleaseTokenPoolEncoder.InitializeByCcipAdmin(typeArgs, ref, ccipAdminProof, coinMetadata) if err != nil { return nil, fmt.Errorf("failed to encode function call: %w", err) } @@ -1362,7 +1362,7 @@ func (c lockReleaseTokenPoolEncoder) InitializeWithArgs(typeArgs []string, args } // InitializeByCcipAdmin encodes a call to the initialize_by_ccip_admin Move function. -func (c lockReleaseTokenPoolEncoder) InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, tokenPoolAdministrator string, rebalancer string) (*bind.EncodedCall, error) { +func (c lockReleaseTokenPoolEncoder) InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object) (*bind.EncodedCall, error) { typeArgsList := typeArgs typeParamsList := []string{ "T", @@ -1371,14 +1371,10 @@ func (c lockReleaseTokenPoolEncoder) InitializeByCcipAdmin(typeArgs []string, re "&mut CCIPObjectRef", "state_object::CCIPAdminProof", "&CoinMetadata", - "address", - "address", }, []any{ ref, ccipAdminProof, coinMetadata, - tokenPoolAdministrator, - rebalancer, }, nil) } @@ -1389,8 +1385,6 @@ func (c lockReleaseTokenPoolEncoder) InitializeByCcipAdminWithArgs(typeArgs []st "&mut CCIPObjectRef", "state_object::CCIPAdminProof", "&CoinMetadata", - "address", - "address", } if len(args) != len(expectedParams) { diff --git a/bindings/generated/ccip/ccip_token_pools/managed_token_pool/managed_token_pool.go b/bindings/generated/ccip/ccip_token_pools/managed_token_pool/managed_token_pool.go index 4052cbc9..9cc768f8 100644 --- a/bindings/generated/ccip/ccip_token_pools/managed_token_pool/managed_token_pool.go +++ b/bindings/generated/ccip/ccip_token_pools/managed_token_pool/managed_token_pool.go @@ -19,12 +19,12 @@ var ( _ = big.NewInt ) -const FunctionInfo = `[{"package":"managed_token_pool","module":"managed_token_pool","name":"accept_ownership","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"accept_ownership_from_object","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"from","type":"sui::object::UID"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"add_remote_pool","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"apply_allowlist_updates","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"removes","type":"vector
"},{"name":"adds","type":"vector
"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"apply_chain_updates","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selectors_to_remove","type":"vector"},{"name":"remote_chain_selectors_to_add","type":"vector"},{"name":"remote_pool_addresses_to_add","type":"vector>>"},{"name":"remote_token_addresses_to_add","type":"vector>"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"destroy_token_pool","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"execute_ownership_transfer","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"ManagedTokenPoolState"},{"name":"to","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"execute_ownership_transfer_to_mcms","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"ManagedTokenPoolState"},{"name":"registry","type":"Registry"},{"name":"to","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_allowlist","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_allowlist_enabled","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_remote_pools","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_remote_token","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_supported_chains","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_token","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_token_decimals","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"has_pending_transfer","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"initialize_by_ccip_admin","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"ccip_admin_proof","type":"state_object::CCIPAdminProof"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"mint_cap","type":"MintCap"},{"name":"managed_token_state","type":"address"},{"name":"token_pool_administrator","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"initialize_with_managed_token","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"managed_token_state","type":"TokenState"},{"name":"owner_cap","type":"ManagedTokenOwnerCap"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"mint_cap","type":"MintCap"},{"name":"token_pool_administrator","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"is_remote_pool","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"is_supported_chain","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"lock_or_burn","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"token_transfer_params","type":"onramp_sh::TokenTransferParams"},{"name":"c","type":"Coin"},{"name":"remote_chain_selector","type":"u64"},{"name":"clock","type":"Clock"},{"name":"deny_list","type":"DenyList"},{"name":"token_state","type":"TokenState"},{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"owner","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"pending_transfer_accepted","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"pending_transfer_from","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"pending_transfer_to","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"release_or_mint","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"receiver_params","type":"offramp_sh::ReceiverParams"},{"name":"clock","type":"Clock"},{"name":"deny_list","type":"DenyList"},{"name":"token_state","type":"TokenState"},{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"remove_remote_pool","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"set_allowlist_enabled","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"enabled","type":"bool"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"set_chain_rate_limiter_config","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selector","type":"u64"},{"name":"outbound_is_enabled","type":"bool"},{"name":"outbound_capacity","type":"u64"},{"name":"outbound_rate","type":"u64"},{"name":"inbound_is_enabled","type":"bool"},{"name":"inbound_capacity","type":"u64"},{"name":"inbound_rate","type":"u64"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"set_chain_rate_limiter_configs","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selectors","type":"vector"},{"name":"outbound_is_enableds","type":"vector"},{"name":"outbound_capacities","type":"vector"},{"name":"outbound_rates","type":"vector"},{"name":"inbound_is_enableds","type":"vector"},{"name":"inbound_capacities","type":"vector"},{"name":"inbound_rates","type":"vector"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"set_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"coin_metadata_address","type":"address"},{"name":"managed_token_state","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"transfer_ownership","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"new_owner","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"type_and_version","parameters":null}]` +const FunctionInfo = `[{"package":"managed_token_pool","module":"managed_token_pool","name":"accept_ownership","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"accept_ownership_from_object","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"from","type":"sui::object::UID"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"add_remote_pool","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"apply_allowlist_updates","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"removes","type":"vector
"},{"name":"adds","type":"vector
"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"apply_chain_updates","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selectors_to_remove","type":"vector"},{"name":"remote_chain_selectors_to_add","type":"vector"},{"name":"remote_pool_addresses_to_add","type":"vector>>"},{"name":"remote_token_addresses_to_add","type":"vector>"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"destroy_token_pool","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"execute_ownership_transfer","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"ManagedTokenPoolState"},{"name":"to","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"execute_ownership_transfer_to_mcms","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"ManagedTokenPoolState"},{"name":"registry","type":"Registry"},{"name":"to","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_allowlist","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_allowlist_enabled","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_remote_pools","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_remote_token","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_supported_chains","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_token","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"get_token_decimals","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"has_pending_transfer","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"initialize_by_ccip_admin","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"ccip_admin_proof","type":"state_object::CCIPAdminProof"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"mint_cap","type":"MintCap"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"initialize_with_managed_token","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"managed_token_state","type":"TokenState"},{"name":"owner_cap","type":"ManagedTokenOwnerCap"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"mint_cap","type":"MintCap"},{"name":"token_pool_administrator","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"is_remote_pool","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"is_supported_chain","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"lock_or_burn","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"token_transfer_params","type":"onramp_sh::TokenTransferParams"},{"name":"c","type":"Coin"},{"name":"remote_chain_selector","type":"u64"},{"name":"clock","type":"Clock"},{"name":"deny_list","type":"DenyList"},{"name":"token_state","type":"TokenState"},{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"owner","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"pending_transfer_accepted","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"pending_transfer_from","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"pending_transfer_to","parameters":[{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"release_or_mint","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"receiver_params","type":"offramp_sh::ReceiverParams"},{"name":"clock","type":"Clock"},{"name":"deny_list","type":"DenyList"},{"name":"token_state","type":"TokenState"},{"name":"state","type":"ManagedTokenPoolState"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"remove_remote_pool","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"set_allowlist_enabled","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"enabled","type":"bool"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"set_chain_rate_limiter_config","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selector","type":"u64"},{"name":"outbound_is_enabled","type":"bool"},{"name":"outbound_capacity","type":"u64"},{"name":"outbound_rate","type":"u64"},{"name":"inbound_is_enabled","type":"bool"},{"name":"inbound_capacity","type":"u64"},{"name":"inbound_rate","type":"u64"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"set_chain_rate_limiter_configs","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selectors","type":"vector"},{"name":"outbound_is_enableds","type":"vector"},{"name":"outbound_capacities","type":"vector"},{"name":"outbound_rates","type":"vector"},{"name":"inbound_is_enableds","type":"vector"},{"name":"inbound_capacities","type":"vector"},{"name":"inbound_rates","type":"vector"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"set_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"coin_metadata_address","type":"address"},{"name":"managed_token_state","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"transfer_ownership","parameters":[{"name":"state","type":"ManagedTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"new_owner","type":"address"}]},{"package":"managed_token_pool","module":"managed_token_pool","name":"type_and_version","parameters":null}]` type IManagedTokenPool interface { TypeAndVersion(ctx context.Context, opts *bind.CallOpts) (*models.SuiTransactionBlockResponse, error) InitializeWithManagedToken(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, managedTokenState bind.Object, ownerCap bind.Object, coinMetadata bind.Object, mintCap bind.Object, tokenPoolAdministrator string) (*models.SuiTransactionBlockResponse, error) - InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, mintCap bind.Object, managedTokenState string, tokenPoolAdministrator string) (*models.SuiTransactionBlockResponse, error) + InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, mintCap bind.Object) (*models.SuiTransactionBlockResponse, error) SetPool(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, state bind.Object, ownerCap bind.Object, coinMetadataAddress string, managedTokenState string) (*models.SuiTransactionBlockResponse, error) AddRemotePool(ctx context.Context, opts *bind.CallOpts, typeArgs []string, state bind.Object, ownerCap bind.Object, remoteChainSelector uint64, remotePoolAddress []byte) (*models.SuiTransactionBlockResponse, error) RemoveRemotePool(ctx context.Context, opts *bind.CallOpts, typeArgs []string, state bind.Object, ownerCap bind.Object, remoteChainSelector uint64, remotePoolAddress []byte) (*models.SuiTransactionBlockResponse, error) @@ -98,7 +98,7 @@ type ManagedTokenPoolEncoder interface { TypeAndVersionWithArgs(args ...any) (*bind.EncodedCall, error) InitializeWithManagedToken(typeArgs []string, ref bind.Object, managedTokenState bind.Object, ownerCap bind.Object, coinMetadata bind.Object, mintCap bind.Object, tokenPoolAdministrator string) (*bind.EncodedCall, error) InitializeWithManagedTokenWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) - InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, mintCap bind.Object, managedTokenState string, tokenPoolAdministrator string) (*bind.EncodedCall, error) + InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, mintCap bind.Object) (*bind.EncodedCall, error) InitializeByCcipAdminWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) SetPool(typeArgs []string, ref bind.Object, state bind.Object, ownerCap bind.Object, coinMetadataAddress string, managedTokenState string) (*bind.EncodedCall, error) SetPoolWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) @@ -317,8 +317,8 @@ func (c *ManagedTokenPoolContract) InitializeWithManagedToken(ctx context.Contex } // InitializeByCcipAdmin executes the initialize_by_ccip_admin Move function. -func (c *ManagedTokenPoolContract) InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, mintCap bind.Object, managedTokenState string, tokenPoolAdministrator string) (*models.SuiTransactionBlockResponse, error) { - encoded, err := c.managedTokenPoolEncoder.InitializeByCcipAdmin(typeArgs, ref, ccipAdminProof, coinMetadata, mintCap, managedTokenState, tokenPoolAdministrator) +func (c *ManagedTokenPoolContract) InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, mintCap bind.Object) (*models.SuiTransactionBlockResponse, error) { + encoded, err := c.managedTokenPoolEncoder.InitializeByCcipAdmin(typeArgs, ref, ccipAdminProof, coinMetadata, mintCap) if err != nil { return nil, fmt.Errorf("failed to encode function call: %w", err) } @@ -1188,7 +1188,7 @@ func (c managedTokenPoolEncoder) InitializeWithManagedTokenWithArgs(typeArgs []s } // InitializeByCcipAdmin encodes a call to the initialize_by_ccip_admin Move function. -func (c managedTokenPoolEncoder) InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, mintCap bind.Object, managedTokenState string, tokenPoolAdministrator string) (*bind.EncodedCall, error) { +func (c managedTokenPoolEncoder) InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, mintCap bind.Object) (*bind.EncodedCall, error) { typeArgsList := typeArgs typeParamsList := []string{ "T", @@ -1198,15 +1198,11 @@ func (c managedTokenPoolEncoder) InitializeByCcipAdmin(typeArgs []string, ref bi "state_object::CCIPAdminProof", "&CoinMetadata", "MintCap", - "address", - "address", }, []any{ ref, ccipAdminProof, coinMetadata, mintCap, - managedTokenState, - tokenPoolAdministrator, }, nil) } @@ -1218,8 +1214,6 @@ func (c managedTokenPoolEncoder) InitializeByCcipAdminWithArgs(typeArgs []string "state_object::CCIPAdminProof", "&CoinMetadata", "MintCap", - "address", - "address", } if len(args) != len(expectedParams) { diff --git a/bindings/generated/ccip/ccip_token_pools/usdc_token_pool/usdc_token_pool.go b/bindings/generated/ccip/ccip_token_pools/usdc_token_pool/usdc_token_pool.go index 3741f86c..c7bbe475 100644 --- a/bindings/generated/ccip/ccip_token_pools/usdc_token_pool/usdc_token_pool.go +++ b/bindings/generated/ccip/ccip_token_pools/usdc_token_pool/usdc_token_pool.go @@ -19,11 +19,11 @@ var ( _ = big.NewInt ) -const FunctionInfo = `[{"package":"usdc_token_pool","module":"usdc_token_pool","name":"accept_ownership","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"accept_ownership_from_object","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"from","type":"sui::object::UID"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"add_remote_pool","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"apply_allowlist_updates","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"removes","type":"vector
"},{"name":"adds","type":"vector
"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"apply_chain_updates","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selectors_to_remove","type":"vector"},{"name":"remote_chain_selectors_to_add","type":"vector"},{"name":"remote_pool_addresses_to_add","type":"vector>>"},{"name":"remote_token_addresses_to_add","type":"vector>"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"destroy_token_pool","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"execute_ownership_transfer","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"USDCTokenPoolState"},{"name":"to","type":"address"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"execute_ownership_transfer_to_mcms","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"USDCTokenPoolState"},{"name":"registry","type":"Registry"},{"name":"to","type":"address"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_allowlist","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_allowlist_enabled","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_domain","parameters":[{"name":"pool","type":"USDCTokenPoolState"},{"name":"chain_selector","type":"u64"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_package_auth_caller","parameters":null},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_remote_pools","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_remote_token","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_supported_chains","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_token","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_token_decimals","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"has_pending_transfer","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"initialize","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"ccip_admin_proof","type":"state_object::CCIPAdminProof"},{"name":"coin_metadata","type":"CoinMetadata"},{"name":"local_domain_identifier","type":"u32"},{"name":"token_pool_package_id","type":"address"},{"name":"token_pool_administrator","type":"address"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"is_remote_pool","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"is_supported_chain","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"lock_or_burn","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"token_transfer_params","type":"onramp_sh::TokenTransferParams"},{"name":"c","type":"Coin"},{"name":"remote_chain_selector","type":"u64"},{"name":"clock","type":"Clock"},{"name":"deny_list","type":"DenyList"},{"name":"pool","type":"USDCTokenPoolState"},{"name":"state","type":"MinterState"},{"name":"message_transmitter_state","type":"MessageTransmitterState"},{"name":"treasury","type":"Treasury"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"owner","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"pending_transfer_accepted","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"pending_transfer_from","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"pending_transfer_to","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"release_or_mint","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"receiver_params","type":"offramp_sh::ReceiverParams"},{"name":"clock","type":"Clock"},{"name":"deny_list","type":"DenyList"},{"name":"pool","type":"USDCTokenPoolState"},{"name":"state","type":"MinterState"},{"name":"message_transmitter_state","type":"MessageTransmitterState"},{"name":"treasury","type":"Treasury"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"remove_remote_pool","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"set_allowlist_enabled","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"enabled","type":"bool"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"set_chain_rate_limiter_config","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selector","type":"u64"},{"name":"outbound_is_enabled","type":"bool"},{"name":"outbound_capacity","type":"u64"},{"name":"outbound_rate","type":"u64"},{"name":"inbound_is_enabled","type":"bool"},{"name":"inbound_capacity","type":"u64"},{"name":"inbound_rate","type":"u64"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"set_chain_rate_limiter_configs","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selectors","type":"vector"},{"name":"outbound_is_enableds","type":"vector"},{"name":"outbound_capacities","type":"vector"},{"name":"outbound_rates","type":"vector"},{"name":"inbound_is_enableds","type":"vector"},{"name":"inbound_capacities","type":"vector"},{"name":"inbound_rates","type":"vector"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"set_domains","parameters":[{"name":"pool","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selectors","type":"vector"},{"name":"remote_domain_identifiers","type":"vector"},{"name":"allowed_remote_callers","type":"vector>"},{"name":"enableds","type":"vector"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"set_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"coin_metadata_address","type":"address"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"transfer_ownership","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"new_owner","type":"address"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"type_and_version","parameters":null}]` +const FunctionInfo = `[{"package":"usdc_token_pool","module":"usdc_token_pool","name":"accept_ownership","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"accept_ownership_from_object","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"from","type":"sui::object::UID"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"add_remote_pool","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"apply_allowlist_updates","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"removes","type":"vector
"},{"name":"adds","type":"vector
"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"apply_chain_updates","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selectors_to_remove","type":"vector"},{"name":"remote_chain_selectors_to_add","type":"vector"},{"name":"remote_pool_addresses_to_add","type":"vector>>"},{"name":"remote_token_addresses_to_add","type":"vector>"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"destroy_token_pool","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"execute_ownership_transfer","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"USDCTokenPoolState"},{"name":"to","type":"address"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"execute_ownership_transfer_to_mcms","parameters":[{"name":"owner_cap","type":"OwnerCap"},{"name":"state","type":"USDCTokenPoolState"},{"name":"registry","type":"Registry"},{"name":"to","type":"address"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_allowlist","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_allowlist_enabled","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_domain","parameters":[{"name":"pool","type":"USDCTokenPoolState"},{"name":"chain_selector","type":"u64"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_package_auth_caller","parameters":null},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_remote_pools","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_remote_token","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_supported_chains","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_token","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"get_token_decimals","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"has_pending_transfer","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"initialize_by_ccip_admin","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"ccip_admin_proof","type":"state_object::CCIPAdminProof"},{"name":"coin_metadata","type":"CoinMetadata"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"is_remote_pool","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"is_supported_chain","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"remote_chain_selector","type":"u64"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"lock_or_burn","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"token_transfer_params","type":"onramp_sh::TokenTransferParams"},{"name":"c","type":"Coin"},{"name":"remote_chain_selector","type":"u64"},{"name":"clock","type":"Clock"},{"name":"deny_list","type":"DenyList"},{"name":"pool","type":"USDCTokenPoolState"},{"name":"state","type":"MinterState"},{"name":"message_transmitter_state","type":"MessageTransmitterState"},{"name":"treasury","type":"Treasury"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"owner","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"pending_transfer_accepted","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"pending_transfer_from","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"pending_transfer_to","parameters":[{"name":"state","type":"USDCTokenPoolState"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"release_or_mint","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"receiver_params","type":"offramp_sh::ReceiverParams"},{"name":"clock","type":"Clock"},{"name":"deny_list","type":"DenyList"},{"name":"pool","type":"USDCTokenPoolState"},{"name":"state","type":"MinterState"},{"name":"message_transmitter_state","type":"MessageTransmitterState"},{"name":"treasury","type":"Treasury"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"remove_remote_pool","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selector","type":"u64"},{"name":"remote_pool_address","type":"vector"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"set_allowlist_enabled","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"enabled","type":"bool"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"set_chain_rate_limiter_config","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selector","type":"u64"},{"name":"outbound_is_enabled","type":"bool"},{"name":"outbound_capacity","type":"u64"},{"name":"outbound_rate","type":"u64"},{"name":"inbound_is_enabled","type":"bool"},{"name":"inbound_capacity","type":"u64"},{"name":"inbound_rate","type":"u64"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"set_chain_rate_limiter_configs","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"clock","type":"Clock"},{"name":"remote_chain_selectors","type":"vector"},{"name":"outbound_is_enableds","type":"vector"},{"name":"outbound_capacities","type":"vector"},{"name":"outbound_rates","type":"vector"},{"name":"inbound_is_enableds","type":"vector"},{"name":"inbound_capacities","type":"vector"},{"name":"inbound_rates","type":"vector"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"set_domains","parameters":[{"name":"pool","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"remote_chain_selectors","type":"vector"},{"name":"remote_domain_identifiers","type":"vector"},{"name":"allowed_remote_callers","type":"vector>"},{"name":"enableds","type":"vector"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"set_pool","parameters":[{"name":"ref","type":"CCIPObjectRef"},{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"coin_metadata_address","type":"address"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"transfer_ownership","parameters":[{"name":"state","type":"USDCTokenPoolState"},{"name":"owner_cap","type":"OwnerCap"},{"name":"new_owner","type":"address"}]},{"package":"usdc_token_pool","module":"usdc_token_pool","name":"type_and_version","parameters":null}]` type IUsdcTokenPool interface { TypeAndVersion(ctx context.Context, opts *bind.CallOpts) (*models.SuiTransactionBlockResponse, error) - Initialize(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, localDomainIdentifier uint32, tokenPoolPackageId string, tokenPoolAdministrator string) (*models.SuiTransactionBlockResponse, error) + InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object) (*models.SuiTransactionBlockResponse, error) SetPool(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, state bind.Object, ownerCap bind.Object, coinMetadataAddress string) (*models.SuiTransactionBlockResponse, error) GetToken(ctx context.Context, opts *bind.CallOpts, typeArgs []string, state bind.Object) (*models.SuiTransactionBlockResponse, error) GetTokenDecimals(ctx context.Context, opts *bind.CallOpts, typeArgs []string, state bind.Object) (*models.SuiTransactionBlockResponse, error) @@ -99,8 +99,8 @@ type IUsdcTokenPoolDevInspect interface { type UsdcTokenPoolEncoder interface { TypeAndVersion() (*bind.EncodedCall, error) TypeAndVersionWithArgs(args ...any) (*bind.EncodedCall, error) - Initialize(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, localDomainIdentifier uint32, tokenPoolPackageId string, tokenPoolAdministrator string) (*bind.EncodedCall, error) - InitializeWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) + InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object) (*bind.EncodedCall, error) + InitializeByCcipAdminWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) SetPool(typeArgs []string, ref bind.Object, state bind.Object, ownerCap bind.Object, coinMetadataAddress string) (*bind.EncodedCall, error) SetPoolWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) GetToken(typeArgs []string, state bind.Object) (*bind.EncodedCall, error) @@ -361,9 +361,9 @@ func (c *UsdcTokenPoolContract) TypeAndVersion(ctx context.Context, opts *bind.C return c.ExecuteTransaction(ctx, opts, encoded) } -// Initialize executes the initialize Move function. -func (c *UsdcTokenPoolContract) Initialize(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, localDomainIdentifier uint32, tokenPoolPackageId string, tokenPoolAdministrator string) (*models.SuiTransactionBlockResponse, error) { - encoded, err := c.usdcTokenPoolEncoder.Initialize(typeArgs, ref, ccipAdminProof, coinMetadata, localDomainIdentifier, tokenPoolPackageId, tokenPoolAdministrator) +// InitializeByCcipAdmin executes the initialize_by_ccip_admin Move function. +func (c *UsdcTokenPoolContract) InitializeByCcipAdmin(ctx context.Context, opts *bind.CallOpts, typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object) (*models.SuiTransactionBlockResponse, error) { + encoded, err := c.usdcTokenPoolEncoder.InitializeByCcipAdmin(typeArgs, ref, ccipAdminProof, coinMetadata) if err != nil { return nil, fmt.Errorf("failed to encode function call: %w", err) } @@ -1243,39 +1243,30 @@ func (c usdcTokenPoolEncoder) TypeAndVersionWithArgs(args ...any) (*bind.Encoded }) } -// Initialize encodes a call to the initialize Move function. -func (c usdcTokenPoolEncoder) Initialize(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object, localDomainIdentifier uint32, tokenPoolPackageId string, tokenPoolAdministrator string) (*bind.EncodedCall, error) { +// InitializeByCcipAdmin encodes a call to the initialize_by_ccip_admin Move function. +func (c usdcTokenPoolEncoder) InitializeByCcipAdmin(typeArgs []string, ref bind.Object, ccipAdminProof bind.Object, coinMetadata bind.Object) (*bind.EncodedCall, error) { typeArgsList := typeArgs typeParamsList := []string{ "T", } - return c.EncodeCallArgsWithGenerics("initialize", typeArgsList, typeParamsList, []string{ + return c.EncodeCallArgsWithGenerics("initialize_by_ccip_admin", typeArgsList, typeParamsList, []string{ "&mut CCIPObjectRef", "state_object::CCIPAdminProof", "&CoinMetadata", - "u32", - "address", - "address", }, []any{ ref, ccipAdminProof, coinMetadata, - localDomainIdentifier, - tokenPoolPackageId, - tokenPoolAdministrator, }, nil) } -// InitializeWithArgs encodes a call to the initialize Move function using arbitrary arguments. +// InitializeByCcipAdminWithArgs encodes a call to the initialize_by_ccip_admin Move function using arbitrary arguments. // This method allows passing both regular values and transaction.Argument values for PTB chaining. -func (c usdcTokenPoolEncoder) InitializeWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) { +func (c usdcTokenPoolEncoder) InitializeByCcipAdminWithArgs(typeArgs []string, args ...any) (*bind.EncodedCall, error) { expectedParams := []string{ "&mut CCIPObjectRef", "state_object::CCIPAdminProof", "&CoinMetadata", - "u32", - "address", - "address", } if len(args) != len(expectedParams) { @@ -1285,7 +1276,7 @@ func (c usdcTokenPoolEncoder) InitializeWithArgs(typeArgs []string, args ...any) typeParamsList := []string{ "T", } - return c.EncodeCallArgsWithGenerics("initialize", typeArgsList, typeParamsList, expectedParams, args, nil) + return c.EncodeCallArgsWithGenerics("initialize_by_ccip_admin", typeArgsList, typeParamsList, expectedParams, args, nil) } // SetPool encodes a call to the set_pool Move function. diff --git a/contracts/ccip/ccip/sources/state_object.move b/contracts/ccip/ccip/sources/state_object.move index 3629b69b..8c1df14d 100644 --- a/contracts/ccip/ccip/sources/state_object.move +++ b/contracts/ccip/ccip/sources/state_object.move @@ -4,7 +4,7 @@ use ccip::ownable::{Self, OwnerCap, OwnableState}; use mcms::bcs_stream; use mcms::mcms_registry::{Self, Registry, ExecutingCallbackParams}; use std::ascii; -use std::string; +use std::string::{Self, String}; use std::type_name; use sui::address; use sui::derived_object; @@ -179,8 +179,16 @@ public fun pending_transfer_accepted(ref: &CCIPObjectRef): Option { // | MCMS Entrypoint | // ================================================================ -/// Proof for CCIP admin -public struct CCIPAdminProof has drop {} +/// Proof for CCIP admin, `data` is serialized using BCS +/// `data` should contain: +/// - target package id +/// - target module name +/// - target function name +/// - bcs serialized function arguments +public struct CCIPAdminProof has drop { + data: vector, + validated: bool, +} public struct McmsCallback has drop {} @@ -375,7 +383,7 @@ public fun mcms_proof_entrypoint( params: ExecutingCallbackParams, _ctx: &mut TxContext, ): CCIPAdminProof { - let (_owner_cap, function, _data) = mcms_registry::get_callback_params_with_caps< + let (_owner_cap, function, data) = mcms_registry::get_callback_params_with_caps< McmsCallback, OwnerCap, >( @@ -388,7 +396,23 @@ public fun mcms_proof_entrypoint( // So we can safely provide a proof that CCIP admin is calling assert!(*function.as_bytes() == b"initialize_by_ccip_admin", EInvalidFunction); - CCIPAdminProof {} + CCIPAdminProof { data, validated: false } +} + +public fun get_ccip_admin_proof_data(proof: &CCIPAdminProof): vector { + proof.data +} + +public fun get_ccip_admin_proof_validated(proof: &CCIPAdminProof): bool { + proof.validated +} + +public fun set_ccip_admin_proof_validated(proof: &mut CCIPAdminProof, validated: bool) { + proof.validated = validated +} + +public fun destroy_ccip_admin_proof(proof: CCIPAdminProof) { + let CCIPAdminProof { data: _, validated: _ } = proof; } // ================================================================ @@ -410,6 +434,6 @@ public fun pending_transfer(ref: &CCIPObjectRef): (address, address, bool) { } #[test_only] -public fun create_ccip_admin_proof_for_test(): CCIPAdminProof { - CCIPAdminProof {} +public fun create_ccip_admin_proof_for_test(data: vector, validated: bool): CCIPAdminProof { + CCIPAdminProof { data, validated } } diff --git a/contracts/ccip/ccip/sources/token_admin_registry.move b/contracts/ccip/ccip/sources/token_admin_registry.move index a8c086fe..8e00e9a9 100644 --- a/contracts/ccip/ccip/sources/token_admin_registry.move +++ b/contracts/ccip/ccip/sources/token_admin_registry.move @@ -77,6 +77,7 @@ const ETokenAddressNotRegistered: u64 = 6; const ENotAllowed: u64 = 7; const EInvalidFunction: u64 = 8; const EInvalidOwnerCap: u64 = 9; +const EProofNotValidated: u64 = 10; public fun type_and_version(): String { string::utf8(b"TokenAdminRegistry 1.6.0") @@ -342,7 +343,7 @@ public fun register_pool( // the CCIP admin needs to know the token pool's type proof string too. public fun register_pool_by_admin( ref: &mut CCIPObjectRef, - _: state_object::CCIPAdminProof, + ccip_admin_proof: state_object::CCIPAdminProof, coin_metadata_address: address, token_pool_package_id: address, token_pool_module: String, @@ -353,6 +354,9 @@ public fun register_pool_by_admin( release_or_mint_params: vector
, _: &mut TxContext, ) { + assert!(state_object::get_ccip_admin_proof_validated(&ccip_admin_proof), EProofNotValidated); + state_object::destroy_ccip_admin_proof(ccip_admin_proof); + verify_function_allowed( ref, string::utf8(b"token_admin_registry"), diff --git a/contracts/ccip/ccip/tests/offramp_state_helper_tests.move b/contracts/ccip/ccip/tests/offramp_state_helper_tests.move index b069d632..0155ab59 100644 --- a/contracts/ccip/ccip/tests/offramp_state_helper_tests.move +++ b/contracts/ccip/ccip/tests/offramp_state_helper_tests.move @@ -192,7 +192,7 @@ public fun test_complete_token_transfer() { // Register a token in the token admin registry registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, TOKEN_POOL_ADDRESS_1, string::utf8(b"test_pool"), @@ -377,7 +377,7 @@ public fun test_complete_token_transfer_twice_should_fail() { // Register a token in the token admin registry registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, TOKEN_POOL_ADDRESS_1, string::utf8(b"test_pool"), diff --git a/contracts/ccip/ccip/tests/onramp_state_helper_tests.move b/contracts/ccip/ccip/tests/onramp_state_helper_tests.move index a274bc28..4dda8e8d 100644 --- a/contracts/ccip/ccip/tests/onramp_state_helper_tests.move +++ b/contracts/ccip/ccip/tests/onramp_state_helper_tests.move @@ -71,7 +71,7 @@ public fun test_create_token_transfer_params() { // Register a token in the token admin registry first registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, @0x1, string::utf8(b"test_pool"), @@ -128,7 +128,7 @@ public fun test_create_token_transfer_params_basic() { // Register a token with TestTypeProof registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, @0x1, string::utf8(b"test_pool"), @@ -167,7 +167,7 @@ public fun test_get_remote_chain_selector() { // Register a token registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, @0x1, string::utf8(b"test_pool"), @@ -234,7 +234,7 @@ public fun test_create_and_verify_token_transfer() { // Register a token in the token admin registry first registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, @0x1, string::utf8(b"test_pool"), @@ -305,7 +305,7 @@ public fun test_add_multiple_token_transfers_should_fail() { // Register a token registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, @0x1, string::utf8(b"test_pool"), @@ -381,7 +381,7 @@ public fun test_get_source_token_transfer_data() { // Register a token registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, @0x1, string::utf8(b"test_pool"), @@ -438,7 +438,7 @@ public fun test_edge_case_large_amounts() { // Register a token registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, @0x1, string::utf8(b"test_pool"), @@ -485,7 +485,7 @@ public fun test_edge_case_empty_data() { // Register a token registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, @0x1, string::utf8(b"test_pool"), @@ -537,7 +537,7 @@ public fun test_zero_amount_transfer() { // Register a token registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, @0x1, string::utf8(b"test_pool"), @@ -583,7 +583,7 @@ public fun test_source_transfer_cap_permission() { // Register a token registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), TOKEN_ADDRESS_1, @0x1, string::utf8(b"test_pool"), diff --git a/contracts/ccip/ccip/tests/token_admin_registry_tests.move b/contracts/ccip/ccip/tests/token_admin_registry_tests.move index 3cf9998c..a5779ed2 100644 --- a/contracts/ccip/ccip/tests/token_admin_registry_tests.move +++ b/contracts/ccip/ccip/tests/token_admin_registry_tests.move @@ -223,7 +223,7 @@ public fun test_register_pool_by_admin() { // Register pool as admin (without treasury cap) registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), @0x123, // coin_metadata_address MOCK_TOKEN_POOL_PACKAGE_ID_1, // token_pool_package_id string::utf8(b"admin_registered_pool"), // token_pool_module @@ -1426,7 +1426,7 @@ public fun test_set_pool_with_different_package_ids() { registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), mock_token_address, original_pool_package_id, string::utf8(b"original_pool_module"), @@ -1640,7 +1640,7 @@ public fun test_set_pool_only_admin_can_call() { registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), mock_token_address, @0xAAAA, string::utf8(b"test_pool"), @@ -1706,7 +1706,7 @@ public fun test_mcms_set_pool_with_package_change() { registry::register_pool_by_admin( &mut ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), mock_token_address, original_pool_package_id, string::utf8(b"original_pool"), diff --git a/contracts/ccip/ccip_token_pools/burn_mint_token_pool/sources/burn_mint_token_pool.move b/contracts/ccip/ccip_token_pools/burn_mint_token_pool/sources/burn_mint_token_pool.move index 9346f1dd..6d11f887 100644 --- a/contracts/ccip/ccip_token_pools/burn_mint_token_pool/sources/burn_mint_token_pool.move +++ b/contracts/ccip/ccip_token_pools/burn_mint_token_pool/sources/burn_mint_token_pool.move @@ -31,6 +31,10 @@ public struct BurnMintTokenPoolState has key { const EInvalidArguments: u64 = 1; const EInvalidOwnerCap: u64 = 2; const EInvalidFunction: u64 = 3; +const EInvalidProof: u64 = 4; +const EInvalidPackageId: u64 = 5; +const EInvalidModuleName: u64 = 6; +const EInvalidFunctionName: u64 = 7; const CLOCK_ADDRESS: address = @0x6; @@ -71,12 +75,30 @@ public fun initialize( public fun initialize_by_ccip_admin( ref: &mut CCIPObjectRef, - ccip_admin_proof: state_object::CCIPAdminProof, + mut ccip_admin_proof: state_object::CCIPAdminProof, coin_metadata: &CoinMetadata, treasury_cap: TreasuryCap, - token_pool_administrator: address, ctx: &mut TxContext, ) { + assert!(!state_object::get_ccip_admin_proof_validated(&ccip_admin_proof), EInvalidProof); + + let data = state_object::get_ccip_admin_proof_data(&ccip_admin_proof); + let mut stream = bcs_stream::new(data); + let target_package_id = bcs_stream::deserialize_address(&mut stream); + let target_module_name = bcs_stream::deserialize_string(&mut stream); + let target_function_name = bcs_stream::deserialize_string(&mut stream); + let token_pool_administrator = bcs_stream::deserialize_address(&mut stream); + bcs_stream::assert_is_consumed(&stream); + + assert!(target_package_id == @burn_mint_token_pool, EInvalidPackageId); + assert!(target_module_name == string::utf8(b"burn_mint_token_pool"), EInvalidModuleName); + assert!( + target_function_name == string::utf8(b"initialize_by_ccip_admin"), + EInvalidFunctionName, + ); + + state_object::set_ccip_admin_proof_validated(&mut ccip_admin_proof, true); + let ( coin_metadata_address, type_proof_type_name, diff --git a/contracts/ccip/ccip_token_pools/burn_mint_token_pool/tests/burn_mint_token_pool_ownable_test.move b/contracts/ccip/ccip_token_pools/burn_mint_token_pool/tests/burn_mint_token_pool_ownable_test.move index f3cf9efa..61a694b2 100644 --- a/contracts/ccip/ccip_token_pools/burn_mint_token_pool/tests/burn_mint_token_pool_ownable_test.move +++ b/contracts/ccip/ccip_token_pools/burn_mint_token_pool/tests/burn_mint_token_pool_ownable_test.move @@ -7,6 +7,8 @@ use ccip::rmn_remote; use ccip::state_object::{Self, CCIPObjectRef}; use ccip::token_admin_registry; use ccip::upgrade_registry; +use std::bcs; +use std::string; use sui::coin; use sui::test_scenario::{Self as ts, Scenario}; @@ -17,6 +19,16 @@ const NEW_OWNER: address = @0x456; const OTHER_USER: address = @0x789; const Decimals: u8 = 8; +/// Helper function to create proof data for initialize_by_ccip_admin +fun create_init_proof_data(token_pool_administrator: address): vector { + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@burn_mint_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"burn_mint_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&token_pool_administrator)); + proof_data +} + public struct TestEnv { scenario: Scenario, state: BurnMintTokenPoolState, @@ -52,10 +64,9 @@ fun setup(): (TestEnv, OwnerCap) { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(OWNER), false), &coin_metadata, treasury_cap, - @0x123, scenario.ctx(), ); diff --git a/contracts/ccip/ccip_token_pools/burn_mint_token_pool/tests/burn_mint_token_pool_tests.move b/contracts/ccip/ccip_token_pools/burn_mint_token_pool/tests/burn_mint_token_pool_tests.move index 4f008715..45678ab3 100644 --- a/contracts/ccip/ccip_token_pools/burn_mint_token_pool/tests/burn_mint_token_pool_tests.move +++ b/contracts/ccip/ccip_token_pools/burn_mint_token_pool/tests/burn_mint_token_pool_tests.move @@ -16,6 +16,7 @@ use std::type_name; use sui::clock; use sui::coin; use sui::test_scenario; +use mcms::bcs_stream; public struct BURN_MINT_TOKEN_POOL_TESTS has drop {} @@ -28,6 +29,16 @@ const NewRemoteChain: u64 = 3000; const NewRemotePool: vector = b"new_remote_pool"; const NewRemoteToken: vector = b"new_remote_token"; +/// Helper function to create proof data for initialize_by_ccip_admin +fun create_init_proof_data(token_pool_administrator: address): vector { + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@burn_mint_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"burn_mint_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&token_pool_administrator)); + proof_data +} + fun setup_ccip_environment( scenario: &mut test_scenario::Scenario, ): (ccip::ownable::OwnerCap, CCIPObjectRef) { @@ -84,10 +95,9 @@ public fun test_initialize_and_basic_functionality() { // Initialize burn mint token pool burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, // token_pool_administrator ctx, ); @@ -148,10 +158,9 @@ public fun test_chain_configuration_management() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -264,10 +273,9 @@ public fun test_allowlist_management() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -322,10 +330,9 @@ public fun test_rate_limiter_configuration() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -425,10 +432,9 @@ public fun test_invalid_arguments_rate_limiter_configs() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -489,10 +495,9 @@ public fun test_comprehensive_allowlist_operations() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -550,10 +555,9 @@ public fun test_destroy_token_pool() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -606,10 +610,9 @@ public fun test_comprehensive_rate_limiter_operations() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -708,10 +711,9 @@ public fun test_edge_cases_and_boundary_conditions() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -844,12 +846,18 @@ public fun test_lock_or_burn_comprehensive() { let test_coin = coin::mint(&mut treasury_cap, 1000, ctx); // Small amount to stay within rate limiter transfer::public_transfer(test_coin, @0x456); // Transfer to test user + // Create proof data with proper BCS encoding + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@burn_mint_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"burn_mint_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&@0x123)); // token_pool_administrator + burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(proof_data, false), &coin_metadata, treasury_cap, // treasury_cap is moved here - @0x123, ctx, ); @@ -992,10 +1000,9 @@ public fun test_release_or_mint_comprehensive() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -1134,10 +1141,9 @@ public fun test_set_allowlist_enabled() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -1198,10 +1204,9 @@ public fun test_apply_allowlist_updates() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -1303,10 +1308,9 @@ public fun test_set_pool() { // Initialize normally with burn_mint_token_pool burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -1374,7 +1378,7 @@ public fun test_set_pool() { token_admin_registry::register_pool_by_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), coin_metadata_address, different_package_id, string::utf8(b"different_pool"), @@ -1519,10 +1523,9 @@ public fun test_allowlist_enabled_and_updates_comprehensive() { burn_mint_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(create_init_proof_data(@0x123), false), &coin_metadata, treasury_cap, - @0x123, ctx, ); @@ -1587,3 +1590,318 @@ public fun test_allowlist_enabled_and_updates_comprehensive() { test_scenario::end(scenario); } + +// ================================================================ +// | CCIPAdminProof Tests | +// ================================================================ + +#[test] +#[expected_failure(abort_code = burn_mint_token_pool::EInvalidPackageId)] +public fun test_initialize_with_invalid_package_id() { + let mut scenario = test_scenario::begin(@burn_mint_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(@burn_mint_token_pool); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + BURN_MINT_TOKEN_POOL_TESTS {}, + Decimals, + b"BMTP", + b"BurnMintTestToken", + b"burn_mint_test_token", + option::none(), + ctx, + ); + + // Create proof with WRONG package ID + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@0xbad)); // Wrong package! + proof_data.append(bcs::to_bytes(&string::utf8(b"burn_mint_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&@0x123)); + + // This should fail with EInvalidPackageId + burn_mint_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + treasury_cap, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[expected_failure(abort_code = burn_mint_token_pool::EInvalidModuleName)] +public fun test_initialize_with_invalid_module_name() { + let mut scenario = test_scenario::begin(@burn_mint_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(@burn_mint_token_pool); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + BURN_MINT_TOKEN_POOL_TESTS {}, + Decimals, + b"BMTP", + b"BurnMintTestToken", + b"burn_mint_test_token", + option::none(), + ctx, + ); + + // Create proof with WRONG module name + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@burn_mint_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"wrong_module_name"))); // Wrong module! + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&@0x123)); + + // This should fail with EInvalidModuleName + burn_mint_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + treasury_cap, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[expected_failure(abort_code = burn_mint_token_pool::EInvalidFunctionName)] +public fun test_initialize_with_invalid_function_name() { + let mut scenario = test_scenario::begin(@burn_mint_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(@burn_mint_token_pool); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + BURN_MINT_TOKEN_POOL_TESTS {}, + Decimals, + b"BMTP", + b"BurnMintTestToken", + b"burn_mint_test_token", + option::none(), + ctx, + ); + + // Create proof with WRONG function name + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@burn_mint_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"burn_mint_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"wrong_function"))); // Wrong function! + proof_data.append(bcs::to_bytes(&@0x123)); + + // This should fail with EInvalidFunctionName + burn_mint_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + treasury_cap, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[expected_failure(abort_code = burn_mint_token_pool::EInvalidProof)] +public fun test_initialize_with_already_validated_proof() { + let mut scenario = test_scenario::begin(@burn_mint_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(@burn_mint_token_pool); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + BURN_MINT_TOKEN_POOL_TESTS {}, + Decimals, + b"BMTP", + b"BurnMintTestToken", + b"burn_mint_test_token", + option::none(), + ctx, + ); + + // Create proof with validated=true (simulating proof reuse attack) + let proof_data = create_init_proof_data(@0x123); + + // This should fail with EInvalidProof because proof is already marked as validated + burn_mint_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, true), // validated=true! + &coin_metadata, + treasury_cap, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[allow(implicit_const_copy)] +#[expected_failure(abort_code = bcs_stream::E_OUT_OF_BYTES)] +public fun test_initialize_with_malformed_proof_missing_parameter() { + let mut scenario = test_scenario::begin(@burn_mint_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(@burn_mint_token_pool); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + BURN_MINT_TOKEN_POOL_TESTS {}, + Decimals, + b"BMTP", + b"BurnMintTestToken", + b"burn_mint_test_token", + option::none(), + ctx, + ); + + // Create proof with MISSING parameter (only 3 instead of 4) + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@burn_mint_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"burn_mint_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + // Missing: token_pool_administrator! + + // This should fail during deserialization + burn_mint_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + treasury_cap, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[allow(implicit_const_copy)] +#[expected_failure(abort_code = bcs_stream::E_NOT_CONSUMED)] +public fun test_initialize_with_malformed_proof_extra_data() { + let mut scenario = test_scenario::begin(@burn_mint_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(@burn_mint_token_pool); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + BURN_MINT_TOKEN_POOL_TESTS {}, + Decimals, + b"BMTP", + b"BurnMintTestToken", + b"burn_mint_test_token", + option::none(), + ctx, + ); + + // Create proof with EXTRA unexpected data + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@burn_mint_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"burn_mint_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&@0x123)); + proof_data.append(bcs::to_bytes(&@0x456)); // Extra data that shouldn't be here! + + // This should fail at assert_is_consumed check + burn_mint_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + treasury_cap, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +public fun test_initialize_with_valid_proof_comprehensive() { + let mut scenario = test_scenario::begin(@burn_mint_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(@burn_mint_token_pool); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + BURN_MINT_TOKEN_POOL_TESTS {}, + Decimals, + b"BMTP", + b"BurnMintTestToken", + b"burn_mint_test_token", + option::none(), + ctx, + ); + + // Create VALID proof with all correct data + let proof_data = create_init_proof_data(@0x999); + + // This should succeed + burn_mint_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + treasury_cap, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + + // Verify initialization was successful + scenario.next_tx(@burn_mint_token_pool); + { + let pool_state = scenario.take_shared>(); + let owner_cap = scenario.take_from_sender(); + + // Verify pool was created correctly + assert!(burn_mint_token_pool::get_token_decimals(&pool_state) == Decimals); + let token_address = burn_mint_token_pool::get_token(&pool_state); + assert!(token_address != @0x0); + + scenario.return_to_sender(owner_cap); + test_scenario::return_shared(pool_state); + }; + + test_scenario::end(scenario); +} diff --git a/contracts/ccip/ccip_token_pools/lock_release_token_pool/sources/lock_release_token_pool.move b/contracts/ccip/ccip_token_pools/lock_release_token_pool/sources/lock_release_token_pool.move index 7384b47e..b9618d52 100644 --- a/contracts/ccip/ccip_token_pools/lock_release_token_pool/sources/lock_release_token_pool.move +++ b/contracts/ccip/ccip_token_pools/lock_release_token_pool/sources/lock_release_token_pool.move @@ -34,6 +34,10 @@ const ETokenPoolBalanceTooLow: u64 = 2; const EUnauthorized: u64 = 3; const EInvalidOwnerCap: u64 = 4; const EInvalidFunction: u64 = 5; +const EInvalidPackageId: u64 = 6; +const EInvalidModuleName: u64 = 7; +const EInvalidFunctionName: u64 = 8; +const EInvalidProof: u64 = 9; // ================================================================ // | Init | @@ -73,12 +77,31 @@ public fun initialize( /// it does not require a treasury cap object public fun initialize_by_ccip_admin( ref: &mut CCIPObjectRef, - ccip_admin_proof: state_object::CCIPAdminProof, + mut ccip_admin_proof: state_object::CCIPAdminProof, coin_metadata: &CoinMetadata, - token_pool_administrator: address, - rebalancer: address, ctx: &mut TxContext, ) { + assert!(!state_object::get_ccip_admin_proof_validated(&ccip_admin_proof), EInvalidProof); + + let data = state_object::get_ccip_admin_proof_data(&ccip_admin_proof); + let mut stream = bcs_stream::new(data); + + let target_package_id = bcs_stream::deserialize_address(&mut stream); + let target_module_name = bcs_stream::deserialize_string(&mut stream); + let target_function_name = bcs_stream::deserialize_string(&mut stream); + let token_pool_administrator = bcs_stream::deserialize_address(&mut stream); + let rebalancer = bcs_stream::deserialize_address(&mut stream); + bcs_stream::assert_is_consumed(&stream); + + assert!(target_package_id == @lock_release_token_pool, EInvalidPackageId); + assert!(target_module_name == string::utf8(b"lock_release_token_pool"), EInvalidModuleName); + assert!( + target_function_name == string::utf8(b"initialize_by_ccip_admin"), + EInvalidFunctionName, + ); + + state_object::set_ccip_admin_proof_validated(&mut ccip_admin_proof, true); + let ( coin_metadata_address, lock_release_token_pool_state_address, diff --git a/contracts/ccip/ccip_token_pools/lock_release_token_pool/tests/lock_release_token_pool_tests.move b/contracts/ccip/ccip_token_pools/lock_release_token_pool/tests/lock_release_token_pool_tests.move index 9f5ece87..6f2a9798 100644 --- a/contracts/ccip/ccip_token_pools/lock_release_token_pool/tests/lock_release_token_pool_tests.move +++ b/contracts/ccip/ccip_token_pools/lock_release_token_pool/tests/lock_release_token_pool_tests.move @@ -18,6 +18,7 @@ use sui::address; use sui::clock; use sui::coin; use sui::test_scenario::{Self, Scenario}; +use mcms::bcs_stream; public struct LOCK_RELEASE_TOKEN_POOL_TESTS has drop {} @@ -30,6 +31,17 @@ const REBALANCER: address = @0x100; const TOKEN_ADMIN: address = @0x200; const CCIP_ADMIN: address = @0x400; +/// Helper function to create proof data for initialize_by_ccip_admin +fun create_init_proof_data(token_pool_administrator: address, rebalancer: address): vector { + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@lock_release_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"lock_release_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&token_pool_administrator)); + proof_data.append(bcs::to_bytes(&rebalancer)); + proof_data +} + fun create_test_scenario(addr: address): Scenario { test_scenario::begin(addr) } @@ -1047,10 +1059,11 @@ public fun test_lock_or_burn_functionality() { lock_release_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test( + create_init_proof_data(TOKEN_ADMIN, REBALANCER), + false + ), &coin_metadata, - TOKEN_ADMIN, - REBALANCER, ctx, ); @@ -1227,10 +1240,11 @@ public fun test_release_or_mint_functionality() { lock_release_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test( + create_init_proof_data(TOKEN_ADMIN, REBALANCER), + false + ), &coin_metadata, - TOKEN_ADMIN, - REBALANCER, ctx, ); @@ -1504,7 +1518,7 @@ public fun test_set_pool() { token_admin_registry::register_pool_by_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), coin_metadata_address, different_package_id, string::utf8(b"different_pool"), @@ -1626,3 +1640,324 @@ public fun test_set_pool() { test_scenario::end(scenario); } + +// ========================================== +// | CCIPAdminProof Tests | +// ========================================== + +#[test] +#[expected_failure(abort_code = lock_release_token_pool::EInvalidPackageId)] +public fun test_initialize_with_invalid_package_id() { + let mut scenario = create_test_scenario(TOKEN_ADMIN); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(TOKEN_ADMIN); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + LOCK_RELEASE_TOKEN_POOL_TESTS {}, + Decimals, + b"TEST", + b"TestToken", + b"test_token", + option::none(), + ctx, + ); + + // Create proof with WRONG package ID + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@0xbad)); // Wrong package! + proof_data.append(bcs::to_bytes(&string::utf8(b"lock_release_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&TOKEN_ADMIN)); + proof_data.append(bcs::to_bytes(&REBALANCER)); + + // This should fail with EInvalidPackageId + lock_release_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(treasury_cap, ctx.sender()); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[expected_failure(abort_code = lock_release_token_pool::EInvalidModuleName)] +public fun test_initialize_with_invalid_module_name() { + let mut scenario = create_test_scenario(TOKEN_ADMIN); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(TOKEN_ADMIN); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + LOCK_RELEASE_TOKEN_POOL_TESTS {}, + Decimals, + b"TEST", + b"TestToken", + b"test_token", + option::none(), + ctx, + ); + + // Create proof with WRONG module name + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@lock_release_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"wrong_module_name"))); // Wrong module! + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&TOKEN_ADMIN)); + proof_data.append(bcs::to_bytes(&REBALANCER)); + + // This should fail with EInvalidModuleName + lock_release_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(treasury_cap, ctx.sender()); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[expected_failure(abort_code = lock_release_token_pool::EInvalidFunctionName)] +public fun test_initialize_with_invalid_function_name() { + let mut scenario = create_test_scenario(TOKEN_ADMIN); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(TOKEN_ADMIN); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + LOCK_RELEASE_TOKEN_POOL_TESTS {}, + Decimals, + b"TEST", + b"TestToken", + b"test_token", + option::none(), + ctx, + ); + + // Create proof with WRONG function name + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@lock_release_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"lock_release_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"wrong_function"))); // Wrong function! + proof_data.append(bcs::to_bytes(&TOKEN_ADMIN)); + proof_data.append(bcs::to_bytes(&REBALANCER)); + + // This should fail with EInvalidFunctionName + lock_release_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(treasury_cap, ctx.sender()); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[expected_failure(abort_code = lock_release_token_pool::EInvalidProof)] +public fun test_initialize_with_already_validated_proof() { + let mut scenario = create_test_scenario(TOKEN_ADMIN); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(TOKEN_ADMIN); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + LOCK_RELEASE_TOKEN_POOL_TESTS {}, + Decimals, + b"TEST", + b"TestToken", + b"test_token", + option::none(), + ctx, + ); + + // Create proof with validated=true (simulating proof reuse attack) + let proof_data = create_init_proof_data(TOKEN_ADMIN, REBALANCER); + + // This should fail with EInvalidProof because proof is already marked as validated + lock_release_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, true), // validated=true! + &coin_metadata, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(treasury_cap, ctx.sender()); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[allow(implicit_const_copy)] +#[expected_failure(abort_code = bcs_stream::E_OUT_OF_BYTES)] +public fun test_initialize_with_malformed_proof_missing_parameter() { + let mut scenario = create_test_scenario(TOKEN_ADMIN); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(TOKEN_ADMIN); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + LOCK_RELEASE_TOKEN_POOL_TESTS {}, + Decimals, + b"TEST", + b"TestToken", + b"test_token", + option::none(), + ctx, + ); + + // Create proof with MISSING parameter (only 4 instead of 5) + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@lock_release_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"lock_release_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&TOKEN_ADMIN)); + // Missing: rebalancer! + + // This should fail during deserialization + lock_release_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(treasury_cap, ctx.sender()); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[allow(implicit_const_copy)] +#[expected_failure(abort_code = bcs_stream::E_NOT_CONSUMED)] +public fun test_initialize_with_malformed_proof_extra_data() { + let mut scenario = create_test_scenario(TOKEN_ADMIN); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(TOKEN_ADMIN); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + LOCK_RELEASE_TOKEN_POOL_TESTS {}, + Decimals, + b"TEST", + b"TestToken", + b"test_token", + option::none(), + ctx, + ); + + // Create proof with EXTRA unexpected data + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@lock_release_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"lock_release_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&TOKEN_ADMIN)); + proof_data.append(bcs::to_bytes(&REBALANCER)); + proof_data.append(bcs::to_bytes(&@0x456)); // Extra data that shouldn't be here! + + // This should fail at assert_is_consumed check + lock_release_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(treasury_cap, ctx.sender()); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +public fun test_initialize_with_valid_proof_comprehensive() { + let mut scenario = create_test_scenario(TOKEN_ADMIN); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + scenario.next_tx(TOKEN_ADMIN); + { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + LOCK_RELEASE_TOKEN_POOL_TESTS {}, + Decimals, + b"TEST", + b"TestToken", + b"test_token", + option::none(), + ctx, + ); + + // Create VALID proof with all correct data + let proof_data = create_init_proof_data(@0x999, @0x888); + + // This should succeed + lock_release_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + ctx, + ); + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(treasury_cap, ctx.sender()); + }; + + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + + // Verify initialization was successful + scenario.next_tx(TOKEN_ADMIN); + { + let pool_state = scenario.take_shared>(); + let owner_cap = scenario.take_from_sender(); + + // Verify pool was created correctly + assert!(lock_release_token_pool::get_token_decimals(&pool_state) == Decimals); + let token_address = lock_release_token_pool::get_token(&pool_state); + assert!(token_address != @0x0); + assert!(lock_release_token_pool::get_rebalancer(&pool_state) == @0x888); + + scenario.return_to_sender(owner_cap); + test_scenario::return_shared(pool_state); + }; + + test_scenario::end(scenario); +} diff --git a/contracts/ccip/ccip_token_pools/managed_token_pool/sources/managed_token_pool.move b/contracts/ccip/ccip_token_pools/managed_token_pool/sources/managed_token_pool.move index c904f975..85e1e7a0 100644 --- a/contracts/ccip/ccip_token_pools/managed_token_pool/sources/managed_token_pool.move +++ b/contracts/ccip/ccip_token_pools/managed_token_pool/sources/managed_token_pool.move @@ -33,6 +33,10 @@ public struct ManagedTokenPoolState has key { const EInvalidArguments: u64 = 1; const EInvalidOwnerCap: u64 = 2; const EInvalidFunction: u64 = 3; +const EInvalidProof: u64 = 4; +const EInvalidPackageId: u64 = 5; +const EInvalidModuleName: u64 = 6; +const EInvalidFunctionName: u64 = 7; const CLOCK_ADDRESS: address = @0x6; const DENY_LIST_ADDRESS: address = @0x403; @@ -94,13 +98,32 @@ public fun initialize_with_managed_token( public fun initialize_by_ccip_admin( ref: &mut CCIPObjectRef, - ccip_admin_proof: state_object::CCIPAdminProof, + mut ccip_admin_proof: state_object::CCIPAdminProof, coin_metadata: &CoinMetadata, mint_cap: MintCap, - managed_token_state: address, - token_pool_administrator: address, ctx: &mut TxContext, ) { + assert!(!state_object::get_ccip_admin_proof_validated(&ccip_admin_proof), EInvalidProof); + + let data = state_object::get_ccip_admin_proof_data(&ccip_admin_proof); + let mut stream = bcs_stream::new(data); + + let target_package_id = bcs_stream::deserialize_address(&mut stream); + let target_module_name = bcs_stream::deserialize_string(&mut stream); + let target_function_name = bcs_stream::deserialize_string(&mut stream); + let token_pool_administrator = bcs_stream::deserialize_address(&mut stream); + let managed_token_state = bcs_stream::deserialize_address(&mut stream); + bcs_stream::assert_is_consumed(&stream); + + assert!(target_package_id == @managed_token_pool, EInvalidPackageId); + assert!(target_module_name == string::utf8(b"managed_token_pool"), EInvalidModuleName); + assert!( + target_function_name == string::utf8(b"initialize_by_ccip_admin"), + EInvalidFunctionName, + ); + + state_object::set_ccip_admin_proof_validated(&mut ccip_admin_proof, true); + let ( coin_metadata_address, managed_token_pool_state_address, diff --git a/contracts/ccip/ccip_token_pools/managed_token_pool/tests/managed_token_pool_tests.move b/contracts/ccip/ccip_token_pools/managed_token_pool/tests/managed_token_pool_tests.move index 8b6c3916..d2fbb627 100644 --- a/contracts/ccip/ccip_token_pools/managed_token_pool/tests/managed_token_pool_tests.move +++ b/contracts/ccip/ccip_token_pools/managed_token_pool/tests/managed_token_pool_tests.move @@ -20,6 +20,7 @@ use sui::address; use sui::clock; use sui::coin; use sui::test_scenario::{Self, Scenario}; +use mcms::bcs_stream; public struct MANAGED_TOKEN_POOL_TESTS has drop {} @@ -30,6 +31,20 @@ const DefaultRemoteToken: vector = b"default_remote_token"; const CCIP_ADMIN: address = @0x400; +/// Helper function to create proof data for initialize_by_ccip_admin +fun create_init_proof_data( + token_pool_administrator: address, + managed_token_state_address: address, +): vector { + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@managed_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"managed_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&token_pool_administrator)); + proof_data.append(bcs::to_bytes(&managed_token_state_address)); + proof_data +} + fun setup_ccip_environment(scenario: &mut Scenario): (CCIPOwnerCap, CCIPObjectRef) { scenario.next_tx(CCIP_ADMIN); let ctx = scenario.ctx(); @@ -780,11 +795,12 @@ public fun test_initialize_by_ccip_admin() { // Test initialize_by_ccip_admin function (doesn't require treasury cap) managed_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test( + create_init_proof_data(@0x123, managed_token_state_address), + false + ), &coin_metadata, mint_cap, - managed_token_state_address, // Use the actual managed token state address - @0x123, // token_pool_administrator scenario.ctx(), ); }; @@ -1365,11 +1381,12 @@ public fun test_set_pool() { managed_token_pool::initialize_by_ccip_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test( + create_init_proof_data(TOKEN_ADMIN, token_state_address), + false + ), &coin_metadata, mint_cap, - token_state_address, - TOKEN_ADMIN, scenario.ctx(), ); @@ -1435,7 +1452,7 @@ public fun test_set_pool() { token_admin_registry::register_pool_by_admin( &mut ccip_ref, - state_object::create_ccip_admin_proof_for_test(), + state_object::create_ccip_admin_proof_for_test(vector[], true), coin_metadata_address, different_package_id, string::utf8(b"different_pool"), @@ -1558,3 +1575,505 @@ public fun test_set_pool() { test_scenario::end(scenario); } + +// ================================================================ +// | CCIPAdminProof Tests | +// ================================================================ + +#[test] +#[expected_failure(abort_code = managed_token_pool::EInvalidPackageId)] +public fun test_initialize_with_invalid_package_id() { + let mut scenario = test_scenario::begin(@managed_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + // Create managed token + scenario.next_tx(@managed_token_pool); + let coin_metadata = { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + MANAGED_TOKEN_POOL_TESTS {}, + Decimals, + b"MTPT", + b"ManagedTokenPoolTest", + b"managed_token_pool_test", + option::none(), + ctx, + ); + managed_token::initialize(treasury_cap, ctx); + coin_metadata + }; + + // Get the managed token state address and create mint cap + scenario.next_tx(@managed_token_pool); + let managed_token_state_address = { + let mut token_state = scenario.take_shared>(); + let token_owner_cap = scenario.take_from_sender>(); + let managed_token_state_address = object::id_to_address(&object::id(&token_state)); + managed_token::configure_new_minter( + &mut token_state, + &token_owner_cap, + @managed_token_pool, + 1000000, + true, + scenario.ctx(), + ); + scenario.return_to_sender(token_owner_cap); + test_scenario::return_shared(token_state); + managed_token_state_address + }; + + scenario.next_tx(@managed_token_pool); + { + let mint_cap = scenario.take_from_sender>(); + + // Create proof with WRONG package ID + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@0xbad)); // Wrong package! + proof_data.append(bcs::to_bytes(&string::utf8(b"managed_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&@0x123)); + proof_data.append(bcs::to_bytes(&managed_token_state_address)); + + // This should fail with EInvalidPackageId + managed_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + mint_cap, + scenario.ctx(), + ); + }; + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[expected_failure(abort_code = managed_token_pool::EInvalidModuleName)] +public fun test_initialize_with_invalid_module_name() { + let mut scenario = test_scenario::begin(@managed_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + // Create managed token + scenario.next_tx(@managed_token_pool); + let coin_metadata = { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + MANAGED_TOKEN_POOL_TESTS {}, + Decimals, + b"MTPT", + b"ManagedTokenPoolTest", + b"managed_token_pool_test", + option::none(), + ctx, + ); + managed_token::initialize(treasury_cap, ctx); + coin_metadata + }; + + // Get the managed token state address and create mint cap + scenario.next_tx(@managed_token_pool); + let managed_token_state_address = { + let mut token_state = scenario.take_shared>(); + let token_owner_cap = scenario.take_from_sender>(); + let managed_token_state_address = object::id_to_address(&object::id(&token_state)); + managed_token::configure_new_minter( + &mut token_state, + &token_owner_cap, + @managed_token_pool, + 1000000, + true, + scenario.ctx(), + ); + scenario.return_to_sender(token_owner_cap); + test_scenario::return_shared(token_state); + managed_token_state_address + }; + + scenario.next_tx(@managed_token_pool); + { + let mint_cap = scenario.take_from_sender>(); + + // Create proof with WRONG module name + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@managed_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"wrong_module_name"))); // Wrong module! + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&@0x123)); + proof_data.append(bcs::to_bytes(&managed_token_state_address)); + + // This should fail with EInvalidModuleName + managed_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + mint_cap, + scenario.ctx(), + ); + }; + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[expected_failure(abort_code = managed_token_pool::EInvalidFunctionName)] +public fun test_initialize_with_invalid_function_name() { + let mut scenario = test_scenario::begin(@managed_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + // Create managed token + scenario.next_tx(@managed_token_pool); + let coin_metadata = { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + MANAGED_TOKEN_POOL_TESTS {}, + Decimals, + b"MTPT", + b"ManagedTokenPoolTest", + b"managed_token_pool_test", + option::none(), + ctx, + ); + managed_token::initialize(treasury_cap, ctx); + coin_metadata + }; + + // Get the managed token state address and create mint cap + scenario.next_tx(@managed_token_pool); + let managed_token_state_address = { + let mut token_state = scenario.take_shared>(); + let token_owner_cap = scenario.take_from_sender>(); + let managed_token_state_address = object::id_to_address(&object::id(&token_state)); + managed_token::configure_new_minter( + &mut token_state, + &token_owner_cap, + @managed_token_pool, + 1000000, + true, + scenario.ctx(), + ); + scenario.return_to_sender(token_owner_cap); + test_scenario::return_shared(token_state); + managed_token_state_address + }; + + scenario.next_tx(@managed_token_pool); + { + let mint_cap = scenario.take_from_sender>(); + + // Create proof with WRONG function name + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@managed_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"managed_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"wrong_function"))); // Wrong function! + proof_data.append(bcs::to_bytes(&@0x123)); + proof_data.append(bcs::to_bytes(&managed_token_state_address)); + + // This should fail with EInvalidFunctionName + managed_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + mint_cap, + scenario.ctx(), + ); + }; + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[expected_failure(abort_code = managed_token_pool::EInvalidProof)] +public fun test_initialize_with_already_validated_proof() { + let mut scenario = test_scenario::begin(@managed_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + // Create managed token + scenario.next_tx(@managed_token_pool); + let coin_metadata = { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + MANAGED_TOKEN_POOL_TESTS {}, + Decimals, + b"MTPT", + b"ManagedTokenPoolTest", + b"managed_token_pool_test", + option::none(), + ctx, + ); + managed_token::initialize(treasury_cap, ctx); + coin_metadata + }; + + // Get the managed token state address and create mint cap + scenario.next_tx(@managed_token_pool); + let managed_token_state_address = { + let mut token_state = scenario.take_shared>(); + let token_owner_cap = scenario.take_from_sender>(); + let managed_token_state_address = object::id_to_address(&object::id(&token_state)); + managed_token::configure_new_minter( + &mut token_state, + &token_owner_cap, + @managed_token_pool, + 1000000, + true, + scenario.ctx(), + ); + scenario.return_to_sender(token_owner_cap); + test_scenario::return_shared(token_state); + managed_token_state_address + }; + + scenario.next_tx(@managed_token_pool); + { + let mint_cap = scenario.take_from_sender>(); + + // Create proof with validated=true (simulating proof reuse attack) + let proof_data = create_init_proof_data(@0x123, managed_token_state_address); + + // This should fail with EInvalidProof because proof is already marked as validated + managed_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, true), // validated=true! + &coin_metadata, + mint_cap, + scenario.ctx(), + ); + }; + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[allow(implicit_const_copy)] +#[expected_failure(abort_code = bcs_stream::E_OUT_OF_BYTES)] +public fun test_initialize_with_malformed_proof_missing_parameter() { + let mut scenario = test_scenario::begin(@managed_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + // Create managed token + scenario.next_tx(@managed_token_pool); + let coin_metadata = { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + MANAGED_TOKEN_POOL_TESTS {}, + Decimals, + b"MTPT", + b"ManagedTokenPoolTest", + b"managed_token_pool_test", + option::none(), + ctx, + ); + managed_token::initialize(treasury_cap, ctx); + coin_metadata + }; + + // Get the managed token state address and create mint cap + scenario.next_tx(@managed_token_pool); + let _managed_token_state_address = { + let mut token_state = scenario.take_shared>(); + let token_owner_cap = scenario.take_from_sender>(); + let managed_token_state_address = object::id_to_address(&object::id(&token_state)); + managed_token::configure_new_minter( + &mut token_state, + &token_owner_cap, + @managed_token_pool, + 1000000, + true, + scenario.ctx(), + ); + scenario.return_to_sender(token_owner_cap); + test_scenario::return_shared(token_state); + managed_token_state_address + }; + + scenario.next_tx(@managed_token_pool); + { + let mint_cap = scenario.take_from_sender>(); + + // Create proof with MISSING parameter (only 4 instead of 5) + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@managed_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"managed_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&@0x123)); + // Missing: managed_token_state_address! + + // This should fail during deserialization + managed_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + mint_cap, + scenario.ctx(), + ); + }; + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +#[allow(implicit_const_copy)] +#[expected_failure(abort_code = bcs_stream::E_NOT_CONSUMED)] +public fun test_initialize_with_malformed_proof_extra_data() { + let mut scenario = test_scenario::begin(@managed_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + // Create managed token + scenario.next_tx(@managed_token_pool); + let coin_metadata = { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + MANAGED_TOKEN_POOL_TESTS {}, + Decimals, + b"MTPT", + b"ManagedTokenPoolTest", + b"managed_token_pool_test", + option::none(), + ctx, + ); + managed_token::initialize(treasury_cap, ctx); + coin_metadata + }; + + // Get the managed token state address and create mint cap + scenario.next_tx(@managed_token_pool); + let managed_token_state_address = { + let mut token_state = scenario.take_shared>(); + let token_owner_cap = scenario.take_from_sender>(); + let managed_token_state_address = object::id_to_address(&object::id(&token_state)); + managed_token::configure_new_minter( + &mut token_state, + &token_owner_cap, + @managed_token_pool, + 1000000, + true, + scenario.ctx(), + ); + scenario.return_to_sender(token_owner_cap); + test_scenario::return_shared(token_state); + managed_token_state_address + }; + + scenario.next_tx(@managed_token_pool); + { + let mint_cap = scenario.take_from_sender>(); + + // Create proof with EXTRA unexpected data + let mut proof_data = vector[]; + proof_data.append(bcs::to_bytes(&@managed_token_pool)); + proof_data.append(bcs::to_bytes(&string::utf8(b"managed_token_pool"))); + proof_data.append(bcs::to_bytes(&string::utf8(b"initialize_by_ccip_admin"))); + proof_data.append(bcs::to_bytes(&@0x123)); + proof_data.append(bcs::to_bytes(&managed_token_state_address)); + proof_data.append(bcs::to_bytes(&@0x456)); // Extra data that shouldn't be here! + + // This should fail at assert_is_consumed check + managed_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + mint_cap, + scenario.ctx(), + ); + }; + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + test_scenario::end(scenario); +} + +#[test] +public fun test_initialize_with_valid_proof_comprehensive() { + let mut scenario = test_scenario::begin(@managed_token_pool); + let (ccip_owner_cap, mut ccip_ref) = setup_ccip_environment(&mut scenario); + + // Create managed token + scenario.next_tx(@managed_token_pool); + let coin_metadata = { + let ctx = scenario.ctx(); + let (treasury_cap, coin_metadata) = coin::create_currency( + MANAGED_TOKEN_POOL_TESTS {}, + Decimals, + b"MTPT", + b"ManagedTokenPoolTest", + b"managed_token_pool_test", + option::none(), + ctx, + ); + managed_token::initialize(treasury_cap, ctx); + coin_metadata + }; + + // Get the managed token state address and create mint cap + scenario.next_tx(@managed_token_pool); + let managed_token_state_address = { + let mut token_state = scenario.take_shared>(); + let token_owner_cap = scenario.take_from_sender>(); + let managed_token_state_address = object::id_to_address(&object::id(&token_state)); + managed_token::configure_new_minter( + &mut token_state, + &token_owner_cap, + @managed_token_pool, + 1000000, + true, + scenario.ctx(), + ); + scenario.return_to_sender(token_owner_cap); + test_scenario::return_shared(token_state); + managed_token_state_address + }; + + scenario.next_tx(@managed_token_pool); + { + let mint_cap = scenario.take_from_sender>(); + + // Create VALID proof with all correct data + let proof_data = create_init_proof_data(@0x999, managed_token_state_address); + + // This should succeed + managed_token_pool::initialize_by_ccip_admin( + &mut ccip_ref, + state_object::create_ccip_admin_proof_for_test(proof_data, false), + &coin_metadata, + mint_cap, + scenario.ctx(), + ); + }; + + transfer::public_freeze_object(coin_metadata); + transfer::public_transfer(ccip_owner_cap, @0x0); + test_scenario::return_shared(ccip_ref); + + // Verify initialization was successful + scenario.next_tx(@managed_token_pool); + { + let pool_state = scenario.take_shared>(); + let owner_cap = scenario.take_from_sender(); + + // Verify pool was created correctly + assert!(managed_token_pool::get_token_decimals(&pool_state) == Decimals); + let token_address = managed_token_pool::get_token(&pool_state); + assert!(token_address != @0x0); + + scenario.return_to_sender(owner_cap); + test_scenario::return_shared(pool_state); + }; + + test_scenario::end(scenario); +} diff --git a/contracts/ccip/ccip_token_pools/usdc_token_pool/sources/usdc_token_pool.move b/contracts/ccip/ccip_token_pools/usdc_token_pool/sources/usdc_token_pool.move index 690348f8..fdad5181 100644 --- a/contracts/ccip/ccip_token_pools/usdc_token_pool/sources/usdc_token_pool.move +++ b/contracts/ccip/ccip_token_pools/usdc_token_pool/sources/usdc_token_pool.move @@ -74,6 +74,10 @@ const EDomainNotFound: u64 = 10; const EDomainDisabled: u64 = 11; const ETokenAmountOverflow: u64 = 12; const EInvalidFunction: u64 = 13; +const EInvalidProof: u64 = 14; +const EInvalidPackageId: u64 = 15; +const EInvalidModuleName: u64 = 16; +const EInvalidFunctionName: u64 = 17; // ================================================================ // | Init | @@ -85,15 +89,34 @@ public fun type_and_version(): String { // TODO: should we just import USDC as type arg? #[allow(lint(self_transfer))] -public fun initialize( +public fun initialize_by_ccip_admin( ref: &mut CCIPObjectRef, ccip_admin_proof: state_object::CCIPAdminProof, coin_metadata: &CoinMetadata, // this can be provided as an address or in Move.toml - local_domain_identifier: u32, - token_pool_package_id: address, - token_pool_administrator: address, ctx: &mut TxContext, ) { + assert!(!state_object::get_ccip_admin_proof_validated(&ccip_admin_proof), EInvalidProof); + + let data = state_object::get_ccip_admin_proof_data(&ccip_admin_proof); + let mut stream = bcs_stream::new(data); + + let target_package_id = bcs_stream::deserialize_address(&mut stream); + let target_module_name = bcs_stream::deserialize_string(&mut stream); + let target_function_name = bcs_stream::deserialize_string(&mut stream); + let local_domain_identifier = bcs_stream::deserialize_u32(&mut stream); + let token_pool_package_id = bcs_stream::deserialize_address(&mut stream); + let token_pool_administrator = bcs_stream::deserialize_address(&mut stream); + bcs_stream::assert_is_consumed(&stream); + + assert!(target_package_id == @usdc_token_pool, EInvalidPackageId); + assert!(target_module_name == string::utf8(b"usdc_token_pool"), EInvalidModuleName); + assert!( + target_function_name == string::utf8(b"initialize_by_ccip_admin"), + EInvalidFunctionName, + ); + + state_object::set_ccip_admin_proof_validated(&mut ccip_admin_proof, true); + let coin_metadata_address: address = object::id_to_address(&object::id(coin_metadata)); assert!(coin_metadata_address == @usdc_coin_metadata_object_id, EInvalidCoinMetadata);