# Entry Function

{% hint style="info" %}
If you haven't created a MSafe wallet, please follow the instruction [create-a-msafe-wallet](https://doc.m-safe.io/aptos/developers/interactive-cli/create-a-msafe-wallet "mention") to create a new MSafe wallet.&#x20;
{% endhint %}

You can call any MOVE entry function with MSafe. Other than [transfer-coin](https://doc.m-safe.io/aptos/developers/interactive-cli/transfer-coin "mention") and [smart-contract-or-module-publish](https://doc.m-safe.io/aptos/developers/interactive-cli/smart-contract-or-module-publish "mention"), popular use cases are:

1. Protocol parameter change;
2. Emergency control;
3. Interact with any MOVE module.

### Initiate a call to an entry function

Select a created MSafe account, and select `n) New transaction` to initiate a new transaction. Select 4 to call a module function. &#x20;

```
Please choose your transaction type

	1)	Transfer APT
	2)	Transfer COIN
	3)	Register COIN
	4)	Custom module interaction
	5)	Module publish

Please input your option:		4
```

#### Select module

Then the terminal will prompt arguments for which module to interact with:

```
Start Custom module interaction

	Module name (E.g. 0x1::coin):		0x1908fe0d337d7bd718c8465030c5f306377ac396f3d7acce92f526ae41637cc0::message

Pulling ABI from chain...
```

Here we simply use the message module in [Aptos move example](https://github.com/aptos-labs/aptos-core/blob/main/aptos-move/move-examples/hello_blockchain/sources/hello_blockchain.move). The move src file is also included in the CLI-MSafe repository, and under `./tests/move`.&#x20;

#### Select entry function

After inputing the published module name, the MSafe CLI will fetch ABI data from blockchain, and display public entry functions:

```
Please select the function you want to interact with:

	1)	set_message
	b)	Back

Please input your option:		1
```

In this case, there is only one public entry function `set_message` from the module ABI. Select the function, and input the parameters which is the input to the function.

{% hint style="info" %}
Note at this stage, calling an entry function only allows limited type of arguments, including:

1. u128, u64, u32, u16, u8&#x20;
2. address&#x20;
3. \&signer&#x20;
4. vector\<u8>

We will support more types shortly.
{% endhint %}

#### Input type arguments

First input the number of type arguments. In this case, we do not have type arguments inputs with the entry function signature. Thus, input 0 for `Number Type Arguments`.

```
Number Type Arguments:		0
```

For other functions that take type arguments as input, input the number of arguments and fill in the full name of the argument (E.g. `0x1::coin::CoinInfo`).

#### Input function arguments

The ABI contains function argument types. Follow the instructions to input all parameters:

```
Start to input arguments:

	1: Type signer			&signer
	2: Type 0x1::string::String	"hello momentum safe"
```

{% hint style="info" %}
Note that the signer object is automatically filled in since it cannot be parsed in but through signature verification in MOVE vm.
{% endhint %}

#### Confirm and submit

```
Transaction confirmation:

Action:			Entry function
Call function:		0x1908fe0d337d7bd718c8465030c5f306377ac396f3d7acce92f526ae41637cc0::message::set_message
Arguments (1):		[string]	"hello momentum safe"
Sender:			0x1908fe0d337d7bd718c8465030c5f306377ac396f3d7acce92f526ae41637cc0
Sequence Number:	4
Expiration:		Sun Oct 09 2022 11:58:45 GMT-0700 (Pacific Daylight Time)
Gas Price:		100
Max Gas:		5000
```

Confirm with transaction details, and submit on chain

```
Transaction information correct? [Y/n]

	Transaction 0x121f435278c7e48a49d421cc60951b053c17fe050a8b39047f9145280294e740 submitted to blockchain
	Transaction confirmed on chain.
```

### Confirm for other owners

For other owners, confirm and execute the transaction either on CLI or web application.

```
Pending transactions:

		| SN	| Action			| Confirmation	|

	1)	| 4	| Entry Function		| 1 / 2
	n)	New transaction
	r)	Refresh
	b)	Back
```
