Skip to content

Get started ​

On PulseVM your account is a readable name, and it carries its own permission tree. In about fifteen minutes you'll deploy a contract to it, then give a second key permission to call exactly one of its actions.

1. Pick a network ​

NetworkUse it forAccountsStatus
A-Chain AlpineMetallicus' Pulse-native testnet (SYS token)Created on requestPublic RPC not answering as of 2026-10-19
Your own networkAnything you want to controlYou hold the creator authoritySee Launch your own network

XPR→PulseVM cutover testing is in progress; public test endpoints will be listed on Network Endpoints when available.

2. Install the CLI ​

pulse-ts is the cross-platform CLI, shaped like XPR Network's proton-cli. It needs Node 18 or newer and is not on npm yet, so build it from source:

bash
git clone https://github.com/paulgnz/pulse-cli-ts
cd pulse-cli-ts
npm install
npx tsc -b
npm link          # puts pulse-ts on your PATH
pulse-ts --help

Metallicus also ships a Rust pulse CLI with every pulsevm release (Linux binaries). See Command-line tools.

3. Keys and an account ​

bash
pulse-ts create-key          # prints a PUB_K1_… / PVT_K1_… pair. Save the private key.
pulse-ts key:add             # import the private key into the local, encrypted keystore
  • On Alpine, account creation is an authorized action. Ask in the Telegram group or contact Metallicus with your public key. You get back a named account, such as yourname1, with owner and active set to your key and starter resources.
  • On your own network, you hold the creator authority and create accounts yourself.

4. Point the CLI at the network ​

bash
pulse-ts endpoint:set https://<your-pulsevm-rpc>                # stores the endpoint and reads its chain ID
pulse-ts chain:info                                            # prints head block and chain ID
pulse-ts account yourname1                                     # your permissions and resources

5. Build and deploy ​

Pick a language and follow its quickstart. Each ends with a deployed contract and an action you pushed:

  • Rust: the canonical contract kit. PulseVM and its system contracts are Rust.
  • C++: the full Antelope CDT heritage.
  • TypeScript: AssemblyScript, for teams who prefer it.

6. Give a second key one job ​

This is the step that has no equivalent on most chains. Create a permission for a bot, and bind it to a single action of your contract:

bash
pulse-ts create-key                                            # the bot's key
pulse-ts update-auth yourname1 bot active PUB_K1_…botkey --sign-permission active
pulse-ts push-action eosio linkauth \
  '{"account":"yourname1","code":"yourname1","type":"greet","requirement":"bot"}' \
  -a yourname1@active

Now yourname1@bot can call greet and no other contract action. Try a token transfer with it and the chain refuses before any contract runs. On Alpine the system account is pulse rather than eosio. More in Accounts and permissions.

When it fails ​

ErrorCauseFix
pulse assert failed: <msg> or eosio assert failed: <msg>A contract check failed (Rust and C++ contracts word it differently)Read the message. It names the failing check
action declares irrelevant authorityYou signed with a permission that is not linked to that actionSign with the linked permission, or with active
missing authority of <account>The action does not declare an authorization the contract requiresAdd that account to -a, for example -a yourname1@active
transaction declares authority '…' but does not have signatures for itNo key in your keystore satisfies the permission you namedCheck pulse-ts account <name> and import the right key with pulse-ts key:add
Insufficient RAMThe account is too small for the contractBuy RAM, or ask for more on a testnet
Connection error or empty responseEndpoint not set, or the network is downRun step 4 and check Network endpoints