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.
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.
- 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.
- 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
- 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": []
}
]
}
-
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
}
- 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
}
- 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
- 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"
}
]
}
}
- 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
}
]