How to Integrate with the Zilliqa Blockchain with Magic

How to Integrate with the Zilliqa Blockchain with Magic

Installation

Magic interacts with the Zilliqa blockchain via Magic's extension NPM package @magic-ext/zilliqa. The Zilliqa extension also lets you interact with the blockchain using methods from Zilliqa's Javascript SDK.

note

You can skip straight to our kitchen sink example directly:

šŸ‘‰ Zilliqa Example

NPM

npm install --save @magic-ext/zilliqa

Yarn

yarn add @magic-ext/zilliqa

Initializing Extension

ES Modules/TypeScript

import { Magic } from 'magic-sdk'; import { ZilliqaExtension } from '@magic-ext/zilliqa'; const magic = new Magic('YOUR_API_KEY', { extensions: [ new ZilliqaExtension({ rpcUrl: 'Zilliqa_RPC_NODE_URL', }), ], });

Get User Wallet

Get Wallet

Using getWallet function to get a Zilliqa wallet for the current user.

ES Modules/TypeScript

import { Magic } from 'magic-sdk'; import { ZilliqaExtension } from '@magic-ext/zilliqa'; const magic = new Magic('YOUR_API_KEY', { extensions: [ new ZilliqaExtension({ rpcUrl: 'Zilliqa_RPC_NODE_URL', }), ], }); // Get user's Zilliqa wallet info const wallet = await magic.zilliqa.getWallet(); console.log('Zilliqa wallet: ', wallet);

Send Transaction

Getting Test ZIL

Before you can send transaction on the Zilliqa blockchain, you'll need to acquire some test ZIL (Zilliqa's native cryptocurrency for test network).

  1. Go to our Zilliqa Example application
  2. Login with your email address
  3. Copy your Zilliqa public address
  4. Go to the ZIL Faucet
  5. Paste your copied Zilliqa public address in the text input
  6. You can receive 300 test ZIL
  7. Now you can use your test ZIL in our example app

Call Extension Method

To send a standard Zilliqa blockchain transaction, you can call the magic.Zilliqa.sendTransaction method.

ES Modules/TypeScript

import { Magic } from 'magic-sdk'; import { ZilliqaExtension } from '@magic-ext/zilliqa'; const { BN, Long, bytes, units } = require('@zilliqa-js/util'); const magic = new Magic('YOUR_API_KEY', { extensions: [ new ZilliqaExtension({ rpcUrl: 'Zilliqa_RPC_NODE_URL', }), ], }); const chainId = 333; // chainId of the developer testnet const msgVersion = 1; // current msgVersion const VERSION = bytes.pack(chainId, msgVersion); const myGasPrice = units.toQa('1000', units.Units.Li); const params = { version: VERSION, toAddr: 'zil14vut0rh7q78ydc0g7yt7e5zkfyrmmps00lk6r7', amount: new BN(units.toQa('0.5', units.Units.Zil)), gasPrice: myGasPrice, gasLimit: Long.fromNumber(1), }; const tx = await magic.zil.sendTransaction(params, false); // Send a transaction console.log('send transaction', tx);

Smart Contract

Deploy Contract

Getting Test ZIL

Before you can send transaction on the Zilliqa blockchain, you'll need to acquire some test ZIL (Zilliqa's native cryptocurrency for test network).

  1. Go to our Zilliqa Example application
  2. Login with your email address
  3. Copy your Zilliqa public address
  4. Go to the ZIL Faucet
  5. Paste your copied Zilliqa public address in the text input
  6. You can receive 300 test ZIL
  7. Now you can use your test ZIL in our example app

Call Extension Method

To deploy a smart contract, you can call the magic.zilliqa.deployContract method.

ES Modules/TypeScript

import { Magic } from 'magic-sdk'; import { ZilliqaExtension } from '@magic-ext/zilliqa'; const { BN, Long, bytes, units } = require('@zilliqa-js/util'); const magic = new Magic('YOUR_API_KEY', { extensions: [ new ZilliqaExtension({ rpcUrl: 'Zilliqa_RPC_NODE_URL', }), ], }); const wallet = await magic.zilliqa.getWallet(); const address = wallet.address; const code = `scilla_version 0 (* HelloWorld contract *) import ListUtils (***************************************************) (* Associated library *) (***************************************************) library HelloWorld let not_owner_code = Int32 1 let set_hello_code = Int32 2 (***************************************************) (* The contract definition *) (***************************************************) contract HelloWorld (owner: ByStr20) field welcome_msg : String = "" transition setHello (msg : String) is_owner = builtin eq owner _sender; match is_owner with | False => e = {_eventname : "setHello()"; code : not_owner_code}; event e | True => welcome_msg := msg; e = {_eventname : "setHello()"; code : set_hello_code}; event e end end transition getHello () r <- welcome_msg; e = {_eventname: "getHello()"; msg: r}; event e end`; const init = [ // this parameter is mandatory for all init arrays { vname: '_scilla_version', type: 'Uint32', value: '0', }, { vname: 'owner', type: 'ByStr20', value: `${address}`, }, ]; const chainId = 333; // chainId of the developer testnet const msgVersion = 1; // current msgVersion const VERSION = bytes.pack(chainId, msgVersion); const myGasPrice = units.toQa('1000', units.Units.Li); const params = { version: VERSION, gasPrice: myGasPrice, gasLimit: Long.fromNumber(10000), }; const result = await magic.zil.deployContract(init, code, params, 33, 1000, false); console.log('deploy contract', result);
How to Integrate with the Zilliqa Blockchain with Magic