Deploying and Invoking Soroban Smart Contract using Soroban Python SDK
Tags: soroban, sorobanathon, python, stellar
Published: 2023-02-26 06:24:03

In my [previous post](https://dev.to/darkvallen/setup-soroban-python-sdk-on-windows-j61), I showed you how to set up the Soroban Python SDK on Windows. In this post, we'll use the SDK to deploy and invoke Soroban smart contracts on the Futurenet network.

##Preparation 
Before we begin, make sure you've downloaded the following files from my GitHub repository:

`soroban_deploy_contract.py - Python Script to Deploy Contract on Soroban Futurenet Network`
`soroban_invoke_contract_function.py - Python Script to Invoke Contract on Soroban Futurenet Network`
`soroban_hello_world_contract.wasm - Soroban Hello World Smart Contract` 

![Scripts & Contract](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6rsvrh6stcjm3l74jsgu.png)
You can download these files [here](https://github.com/darkvallen/soroban-python),you can use any other contract file,but in this case i'm using Soroban Hello World Smart Contract from [here](https://soroban.stellar.org/docs/getting-started/hello-world) . Additionally, make sure you've created a Futurenet account at [Stellar Laboratory](https://laboratory.stellar.org/#account-creator?network=futurenet) and funded it.
![Create Account](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i2dmxoj2xzoy82nis3zj.png)

##Deploying a Contract
To deploy a contract, open the soroban_deploy_contract.py file and adjust the following parameters:
```
secret = "S---" #Put your Account Secret Key here
rpc_server_url = "https://horizon-futurenet.stellar.cash:443/soroban/rpc"
network_passphrase = Network.FUTURENET_NETWORK_PASSPHRASE
contract_file_path = "./soroban_hello_world_contract.wasm" 
```
>`secret`: the Secret Key of the Account that we're gonna use to deploy the Smart Contract. **Replace the value with your own account secret key.**
>`rpc_server_url`: the URL of the RPC server you'll use to interact with the Soroban Futurenet network.
>`network_passphrase`: the passphrase you'll use to select the network. This can be changed depending on the network you're interacting with; in this case, we'll use Futurenet.
>`contract_file_path`:  the path to the smart contract file you want to deploy. Replace the value with your own contract file path, or use the `soroban_hello_world_contract.wasm` file included in the GitHub repository.

Save the soroban_deploy_contract.py file with your changes and then run the script in a command prompt using this command :
```
python soroban_deploy_contract.py
```
![Contract Deployed](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w79wjprvvdzx8tfl7syo.png)
Once the script has finished running, you'll receive a contract ID. Be sure to save this for later.
```
contract id: 74a28bbf401e0ed625921dc08b565b2179dba548c905594ed4de2565a3b02e78
```

##Invoking a Contract
To invoke a contract, open the `soroban_invoke_contract_function.py` file and adjust the following parameters:
```
secret = "SDMVWEWUZVYDACEM3G2X2XT4W4BP3OSZHX3KXVOQTJMDIUQQLKAIWK7Z"
rpc_server_url = "https://horizon-futurenet.stellar.cash:443/soroban/rpc"
contract_id = "940985b099a50abf77b8e3a245471d1912f5c1d8502da07128619aa778d90c1f"
network_passphrase = Network.FUTURENET_NETWORK_PASSPHRASE
```
>`secret`: the secret key of the account you'll use to invoke the smart contract. **Replace the value with your own account secret key.**

>`contract_id`: the contract ID of the contract you want to invoke. **Replace the value with the contract ID you received from deploying contract before.**
```
tx = (
    TransactionBuilder(source, network_passphrase)
    .set_timeout(300)
    .append_invoke_contract_function_op(
        contract_id=contract_id,
        function_name="hello",
        parameters=[Symbol("World")],
        source=kp.public_key,
    )
    .build()
)
```
>`function_name`: the name of the function you want to invoke.
>`parameters`: any arguments needed by the function.

Save the `soroban_invoke_contract_function.py` file with your changes and then run the script in a command prompt using this command :
```
python soroban_invoke_contract_function.py
```
![Invoke Contract](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5xwm9n9qnw8dl3a2du4l.png)
Once the script has finished running, you'll receive a response with the result :

```
transaction result: ['Hello', 'World']
```
##Closing
In this blog post, we have gone over the steps to Deploy and Invoke Soroban Smart Contract using Soroban Python SDK. You can deploy or invoke other smart contracts by modifying the scripts.