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