Build your First Smart Contract on L1X VM

Create L1X Project using cargo-l1x

Initiate a new L1X project creation process with Cargo's L1X plugin. The Fungible Token template is utilized here.

cargo l1x create project_name --template ft

This command initiates the creation of a new project named "project_name" while applying the template labeled "ft". Templates offer pre-configured project structures or boilerplate code, streamlining the initial setup of your project.

Compile L1X Project

Navigate to the project directory and compile the L1X project using cargo-l1x build.

cd project_name
cargo l1x build

You will get object file for the compiled contract, at the location target/l1x/release/l1x_ft.o in cargo.

Create Wallet

Create your own wallet to generate a new keypair.

l1x-cli-beta wallet create

Import Wallet

Import you existing wallet using the l1x-cli-beta tool, by providing a private key. If you don't have one, Create Wallet.

l1x-cli-beta wallet import <PRIVATEKEY>

Set Default Wallet

After Importing your wallet set it to be the default interaction account.

l1x-cli-beta wallet default <Wallet_Address>

-- Check Endpoints for TestNet Faucet

Deploy L1X Project

Deploy the compiled L1X project to the L1X blockchain.

l1x-cli-beta contract deploy CONTRACT_OBJECT_FILE_PATH [--endpoint] [--from] [--fee_limit] [--nonce]
  • Example

l1x-cli-beta contract deploy ./sample_object_file/l1x_ft.o --endpoint https://v2-testnet-rpc.l1x.foundation

You will get deployed contract address (DEPLOY_CONTRACT_ADDRESS) as the response of the above command. Use it to initialize your L1X project.

Initialize L1X Project

Initialize your deployed L1X project by setting up its base contract address.

l1x-cli-beta contract init CONTRACT_ADDRESS --args [--endpoint] [--from] [--fee_limit] [--nonce]
  • Example

l1x-cli-beta contract init DEPLOY_CONTRACT_ADDRESS --endpoint https://v2-testnet-rpc.l1x.foundation --fee_limit 100000 --args '{"metadata":{"name": "TokenName","decimals": 18,"symbol": "TokenSymbol"},"account_ids":[],"amounts":[]}'

On successful initialization of the project, you will get initialized contract address (INIT_CONTRACT_ADDRESS) as the response of the init command. Use it for further Readonly and State Changing Function calls.

Call Readonly Function

Execute any readonly function of an L1X smart contract.

l1x-cli-beta contract view CONTRACT_ADDRESS FUNCTION --args [--endpoint] [--from]
  • Example

l1x-cli-beta contract view INIT_CONTRACT_ADDRESS ft_name --endpoint https://v2-testnet-rpc.l1x.foundation

Call State Changing Function

Invoke a state-changing function of an L1X smart contract using l1x-cli-beta, potentially altering the contract's state

l1x-cli-beta contract call INIT_CONTRACT_ADDRESS FUNCTION --args [--endpoint] [--from] [--fee_limit] [--nonce]

Last updated