zetalink
TypeScript icon, indicating that this package has built-in type declarations

0.1.2 • Public • Published

ZetaLink MetaMask Snap

Overview

ZetaLink Snap allows users to interact with Bitcoin and ZetaChain through various JSON-RPC methods.

The ZetaLink Snap is a powerful tool that enhances the functionality of MetaMask, allowing users to seamlessly interact with both Bitcoin and ZetaChain. By providing a suite of JSON-RPC methods, this snap enables developers to build innovative applications that leverage the strengths of both ecosystems.

From a user's perspective, the ZetaLink Snap offers several benefits that enhance their interaction with the ZetaChain ecosystem:

  • Seamless Bitcoin Integration: ZetaLink Snap allows users to easily access and manage their Bitcoin assets directly within MetaMask, making it simpler to engage with ZetaChain and its applications.
  • Streamlined User Experience: ZetaLink's user-friendly interface and comprehensive features ensure a smooth and intuitive experience for users, encouraging them to explore and utilize the ZetaChain ecosystem more extensively.
  • Expanded Access to ZetaChain: By providing a convenient gateway to ZetaChain through MetaMask, the ZetaLink Snap enables users to discover and interact with a broader range of ZetaChain-based applications and services.

Available Methods

Note: If an error occurs, the return type is a string. It is recommended to use the try-catch-finally pattern for better error handling.

0. wallet_requestSnaps

  • Description: Installs the ZetaLink Snap, which is the first step required to use the below mentioned API methods.
  • Parameters: None.
  • Implementation:
const result = await window.ethereum.request({
  method: 'wallet_requestSnaps',
  params: { [snapId]: {} }, // default [snapId] params = {}
});

Note: If the user hasn't installed the MetaMask Snap, none of the API methods will function.

1. derive-btc-wallet

  • Description: Creates a Bitcoin wallet address based on the provided BIP32 public key.
  • Parameters:
    • isMainnet: Boolean indicating whether to use the mainnet or testnet.
  • Implementation:
const btcWallet = await window.ethereum.request({
  method: 'wallet_snap',
  params: {
    snapId: defaultSnapOrigin,
    request: {
      method: 'derive-btc-wallet',
      params: [isMainnet],
    },
  },
});
  • Mock Successful Response:
    "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh" |"tb1qex3zpp07a0ctu8x00ah4mnyess0900a2dklttr" // mainnet || testnet

2. get-btc-trxs

  • Description: Fetches unspent transaction outputs (UTXOs) for the connected Bitcoin account.
  • Parameters: None.
  • Implementation:
const btcTrxs = await window.ethereum.request({
  method: 'wallet_snap',
  params: {
    snapId: defaultSnapOrigin,
    request: {
      method: 'get-btc-trxs',
      params: [],
    },
  },
});
  • Mock Successful Response:
{
  "address": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
  "total_received": 1000000,
  "total_sent": 500000,
  "balance": 500000,
  "unconfirmed_balance": 0,
  "final_balance": 500000,
  "n_tx": 2,
  "unconfirmed_n_tx": 0,
  "final_n_tx": 2,
  "txs": [
    {
      "block_hash": "00000000000000000007878ec04bb2b2e12317804810f4c26033585b3f81ffaa",
      "block_height": 589741,
      "hash": "b84a66c46e24fe71f9d8ab29b06374c7c53cfd989c4e06e81d1d4d120a973016",
      "addresses": ["bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh"],
      "total": 500000,
      "fees": 1000,
      "size": 225,
      "vsize": 225,
      "preference": "high",
      "confirmed": "2019-07-24T11:11:45Z",
      "received": "2019-07-24T11:11:45Z",
      "ver": 1,
      "double_spend": false,
      "vin_sz": 1,
      "vout_sz": 2,
      "confirmations": 1,
      "inputs": [],
      "outputs": []
    }
  ]
}

3. get-deposit-fees

  • Description: Retrieves the current Bitcoin deposit transaction fees zetaDepositFees = (high_priority_fees_in_kb * 0.001)vB * 68vB * 2.
  • Parameters: None.
  • Implementation:
const depositFees = await window.ethereum.request({
  method: 'wallet_snap',
  params: {
    snapId: defaultSnapOrigin,
    request: {
      method: 'get-deposit-fees',
    },
  },
});
  • Mock Successful Response:
    {
        btcFees:1,
        getzetaDepositFees:136
    }

4. get-balance-and-rate

  • Description: Retrieves the balance for a given address and exchange rates for Zeta and Bitcoin.
  • Parameters:
    • address: Ethereum Address to fetch data for.
  • Implementation:
const balanceAndRate = await window.ethereum.request({
  method: 'wallet_snap',
  params: {
    snapId: defaultSnapOrigin,
    request: {
      method: 'get-balance-and-rate',
      params: [evmAddress],
    },
  },
});
  • Mock Successful Response:
{
  "zeta": {
    "balances": [
      {
        "denom": "azeta",
        "amount": "2986347517451374218"
      }
    ],
    "pagination": {
      "next_key": null,
      "total": "1"
    }
  },
  "nonZeta": [
    {
      "token": {
        "address": "0xd97B1de3619ed2c6BEb3860147E30cA8A7dC9891",
        "decimals": "18",
        "name": "BNB-bsc_testnet",
        "symbol": "tBNB",
        "total_supply": "19825202226962956112776",
        "type": "ERC-20"
      },
      "value": "550000000000000"
    }
  ],
  "zetaPrice": 0.480197,
  "btcPrice": 59783
}

5. transact-btc

  • Description: Executes a cross-chain swap transaction for Bitcoin.
  • Parameters:
    • recipientAddress: The address to receive the Bitcoin.
    • ZRC20ContractAddress: The address of the ZRC20 contract to interact with.
    • customMemo: Optional custom memo for the transaction.
    • depositFee: The fee for depositing Bitcoin to ZetaChain.
    • amount: The amount to send.
  • Implementation:
const transactionHash = await window.ethereum.request({
  method: 'wallet_snap',
  params: {
    snapId: defaultSnapOrigin,
    request: {
      method: 'transact-btc',
      params: [
        customMemo,
        depositFee,
        recipientAddress,
        ZRC20ContractAddress,
        amount,
      ],
    },
  },
});
  • Mock Successful Response:
    "3ca3fe3e8f7f0e69abdf50ab2942b3109f88468601fedd79ea57e3e8491025bd" // transaction hash

6. track-cctx

  • Description: Tracks a cross-chain transaction by its hash.
  • Parameters:
    • transactionHash: The hash of the transaction to track.
  • Implementation:
const cctx = await window.ethereum.request({
  method: 'wallet_snap',
  params: {
    snapId: defaultSnapOrigin,
    request: {
      method: 'track-cctx',
      params: [transactionHash],
    },
  },
});
  • Mock Successful Response:
{
  "CrossChainTx": {
    "creator": "zeta167ns6zwczl9asjs47jwv3uhtkxfjcvx3dgf3ct",
    "index": "0x4607fa7805538dab320466e4bc0530fa9c5ca3686da68cb1822492acf9adeef1",
    "zeta_fees": "0",
    "relayed_message": "102fa443f05200bb74aba1c1f15f442dbef32ffb01d97b1de3619ed2c6beb3860147e30ca8a7dc989170991c20c7c4e0021ef0bd3685876cc3ac5251f0",
    "cctx_status": {
      "status": "OutboundMined",
      "status_message": "Outbound succeeded, mined",
      "lastUpdate_timestamp": "1725546253",
      "isAbortRefunded": false
    },
    "inbound_params": {
      "sender": "tb1qex3zpp07a0ctu8x00ah4mnyess0900a2dklttr",
      "sender_chain_id": "18332",
      "tx_origin": "tb1qex3zpp07a0ctu8x00ah4mnyess0900a2dklttr",
      "coin_type": "Gas",
      "asset": "",
      "amount": "4832",
      "observed_hash": "0e5f0285d0727d4ba5ebf33b1d2eb162959deeea1c665967a2fe3fb4cdf70504",
      "observed_external_height": "2903335",
      "ballot_index": "0x4607fa7805538dab320466e4bc0530fa9c5ca3686da68cb1822492acf9adeef1",
      "finalized_zeta_height": "6647368",
      "tx_finalization_status": "Executed"
    },
    "outbound_params": [
      {
        "receiver": "tb1qex3zpp07a0ctu8x00ah4mnyess0900a2dklttr",
        "receiver_chainId": "7001",
        "coin_type": "Gas",
        "amount": "0",
        "tss_nonce": "0",
        "gas_limit": "0",
        "gas_price": "",
        "gas_priority_fee": "",
        "hash": "0x4b5ea13e790b82edc9cf3db9a5ef11f98edb21d250f6ebb882de0168e10e23d0",
        "ballot_index": "",
        "observed_external_height": "6647368",
        "gas_used": "0",
        "effective_gas_price": "0",
        "effective_gas_limit": "0",
        "tss_pubkey": "zetapub1addwnpepq28c57cvcs0a2htsem5zxr6qnlvq9mzhmm76z3jncsnzz32rclangr2g35p",
        "tx_finalization_status": "Executed"
      }
    ]
  }
}

7. get-btc-utxo

  • Description: Fetches unspent transaction outputs (UTXOs) for a specific Bitcoin address.
  • Parameters:None
  • Implementation:
const utxo = await window.ethereum.request({
  method: 'wallet_snap',
  params: {
    snapId: defaultSnapOrigin,
    request: {
      method: 'get-btc-utxo',
      params: [],
    },
  },
});
  • Mock Successful Response:
[
  {
    "txid": "b85f387b72729af2046f545e14c45350f4ac17cad58a5bc7018ce0c1b33cbd32",
    "vout": 0,
    "status": {
      "confirmed": true,
      "block_height": 3001990,
      "block_hash": "00000000000006c7fce225b1b9fdbc2297d39b6bbf5a92befd637b44c2a9e382",
      "block_time": 1727198799
    },
    "value": 18126
  },
  {
    "txid": "1c81d891c68b74868c1ea85cbe6f837f997c4c96680dc4f14bc4b6e1c9d33525",
    "vout": 2,
    "status": {
      "confirmed": true,
      "block_height": 3004316,
      "block_hash": "00000000000003065681d73252d291a13edc49d4fb5276843f8080357b3a890b",
      "block_time": 1727271387
    },
    "value": 4484
  }
]

Dependencies (15)

Dev Dependencies (25)

Package Sidebar

Install

npm i zetalink

Weekly Downloads

162

Version

0.1.2

License

(MIT-0 OR Apache-2.0)

Unpacked Size

322 kB

Total Files

5

Last publish

Collaborators

  • 1337-ishaan