npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

zetrix-connect-wallet-sdk

v1.1.8

Published

A library for mobile wallet and non-Chrome browsers to connect with the Zetrix blockchain.

Downloads

150

Readme

Zetrix Connect Wallet SDK

First install the npm package:

npm install Zetrix-connect-wallet-sdk

The syntax shown below is Javascript ES6, which needs to be translated to run in a Web browser

1. Initialize the SDK

import ZetrixWalletConnect from 'Zetrix-connect-wallet-sdk';

const options = {
  bridge: 'wss://test-wscw.Zetrix.com',
  callMode: 'web'
}
const ZetrixWalletConnect = new ZetrixWalletConnect(options)

Initialization parameters:

| param | type | required | description | | --- | --- | --- | --- | | bridge | String | Yes | Bridge service IP for communication between H5 JS and App | | qrcode | Boolean | No | Whether to enable the code scan authorization mode (it is recommended to configure this mode on the PC) | | callMode | String | Yes | If the passed in parameter 'web' is used in the web page. If the incoming parameter 'webView' is used in webView |

2. The connection

After initialization, the JS plug-in is required to establish a connection with the WebSocket service

If authorized in Zetrix Wallet app, the authorized account address in Zetrix Wallet App will be returned

ZetrixWalletConnect.connect().then(res => {
   
}).catch(error => {
   
})

Return Parameter Description:

| param | type | description | | --- | --- | --- | | code | Int | Status code | | data.address | String | App authorized account address | | message | String | Return messages |

resp:

{
  code: 0,
  data: {
    address: 'ZTX3YgemDoX7JXkqsyeyprQVpoMJHkp5Qu8US'
  },
  message: ''
}

Status Code Description:

| code | description | promise | | --- | --- | --- | | 0 | Success | Resolve | | 90001 | This plug-in cannot be used because the browser does not support the API syntax used by the plug-in | Reject | | 90002 | Browsers do not support Websocket communication and cannot use this plug-in | Reject |

3. Authorized to connect

By invoking the authorization SDK, Zetrix Wallet App can be notified to perform authorization connection and authorize the current App account. After authorization, the application side can use Zetrix Wallet App's signature, transfer and other functions.

Note: the SDK is used on the PC, and it is recommended to set the initialization parameters qrcode:true. After invoking the authorization SDK, the authorization qrcode will be automatically generated. Zetrix wallet app can scan the code for authorization connection

ZetrixWalletConnect.auth().then(res => {
   
}).catch(error => {
       
})

Return Parameter Description:

| param | type | description | | --- | --- | --- | | code | Int | Status code | | data.address | String | App authorized account address | | message | String | Return messages |

resp:

{
  code: 0,
  data: {
    address: 'ZTX3YgemDoX7JXkqsyeyprQVpoMJHkp5Qu8US'
  },
  message: ''
}

Status Code Description:

| code | description | promise | | --- | --- | --- | | 0 | Success | Resolve | | 1 | Cancel | Reject |

4. The message signature

Zetrix Wallet App can display and sign the content to be signed by calling this method. After signing, the user will return the app signature account public key, App signature account address, signature string, etc.

Note: When the SDK is used on the PC side, the initial parameter is set qrcode:true and authorization is granted, the MESSAGE signature SDK will automatically notify Zetrix Wallet app to perform the signature function

const obj = {
    message: 'Hello world'
}
ZetrixWalletConnect.signMessage(obj).then(res => {
    
}).catch(error => {
   
})

Request param:

| param | type | description | | --- | --- | --- | | message | String | Information to be signed provided by the service side |

Return Parameter Description:

| param | type | description | | --- | --- | --- | | code | Int | Status code | | data.address | String | App authorized account address | | data.publicKey | String | App signed the public key of the account | | data.signData | String | Signature string | | message | String | Return messages |

resp:

{
  code: 0,
  data: {
    address: 'ZTX3YgemDoX7JXkqsyeyprQVpoMJHkp5Qu8US',
    publicKey: 'b001226ed6ee3bdae141e5e2686b2034fd7db1d3e4b562a3d315a14af71de6ab7c844ef786b6',
    signData: '2ed1e99b92377fdf9ed8e7d55d7de322cd59d9df91d8e9c4a4f495931ad5d4da14b1c9258e2e0fdc33d77a48921b0a4acf46492cd171495deec30954ac2eef07',
  },
  message: ''
}

Status Code Description:

| code | description | promise | | --- | --- | --- | | 0 | Success | Resolve | | 1 | Cancel | Reject | | 10011 | Unauthorized | Reject |

5. Blob signature

By calling this method, blob can be passed into the application side and signed by Zetrix Wallet App. After signing, the user will return the app signature account public key, App signature account address, signature string, etc.

Note: PC side using SDK, initial parameter configuration qrcode:true after authorization, call message signature SDK will automatically notify Zetrix Wallet app to perform BLOB signature function (signature only)

const obj = {
    message: '0a255a54583364703475586b32415742576758386648675833353263666b567050366550357835106222b401080712255a54583364703475586b32415742576758386648675833353263666b5670503665503578356288010a255a5458334b5a4d7a4b4451483851525236516d7152346b385a7241366e55693546377a73341a5f7b226d6574686f64223a227472616e73666572222c22706172616d73223a7b22746f223a225a545833545857635879416a4634617959706d6244656165387a414a38726f587a31385941222c2276616c7565223a2231303030303030227d7d30a64a380a'
}
ZetrixWalletConnect.signBlob(obj).then(res => {
    
}).catch(error => {
   
})

Request param:

| param | type | description | | --- | --- | --- | | message | String | Information to be signed provided by the service side |

Return Parameter Description:

| param | type | description | | --- | --- | --- | | code | Int | Status code | | data.address | String | App authorized account address | | data.publicKey | String | App signed the public key of the account | | data.signData | String | Signature string | | message | String | Return messages |

resp:

resp:

{
code: 0,
data: {
    address: "ZTX3YgemDoX7JXkqsyeyprQVpoMJHkp5Qu8US"
    publicKey: "b001226ed6ee3bdae141e5e2686b2034fd7db1d3e4b562a3d315a14af71de6ab7c844ef786b6"
    signData: "00bb613675c634f1586fb31274572ed5211972d94ff3fe25f78997a683744957753ebce3d31913d17ea53d9048b0c30daf6a2dba023486a65c1cae2ca5dea40d
},
message: ''
}

Status Code Description:

| code | description | promise | | --- | --- | --- | | 0 | Success | Resolve | | 1 | Cancel | Reject | | 10011 | Unauthorized | Reject |

6. Obtain account nonce value before transfer

The account Nonce value (account transaction serial number) needs to be obtained before the transfer, and the account continuity needs to be guaranteed, and the nonce value of the account needs to be added by 1 when the new transaction occurs

 const obj = {
    address: 'ZTX3dp4uXk2AWBWgX8fHgX352cfkVpP6eP5x5',
    chainId: '2'
}

// SDK
const nonce = this.ZetrixWalletConnect.getNonce(obj)

// code example
async getNonce () {
    let nonceResult = await this.ZetrixWalletConnect.getNonce(obj)
    const nonce = nonceResult + 1
    return nonce
}

Request param:

| param | type | description | | --- | --- | --- | | address | String | Address of the account whose nonce value needs to be queried | | chainId | String | Network environment: 1 Primary network, 2 Test network |

Return Parameter Description:

| param | type | description | | --- | --- | --- | | nonce | Int | Account transaction serial number |

7. Transaction

This method can support transfer of ZTX, ZTP20 and other protocols and creation and invocation of smart contracts. This SDK is usually used for transactions on the Zetrix Wallet app chain, and developers need to assemble their own data structures from the following data templates before invoking the SDK. The confirmation page is for the App account to sign the transaction independently. After signing, the App will broadcast the transaction to the blockchain node, and the App will respond to the submission status. The final status of the transaction requires the developer to confirm the final state of the transaction by calling the transaction query interface after returning the hash value of the transaction.

Note: When the SDK is used on PC side, the initial parameter configuration qrcode:true and authorization is made, the MESSAGE signature SDK will automatically notify Zetrix Wallet App to execute the transaction function

var obj = {
    from:'ZTX3dp4uXk2AWBWgX8fHgX352cfkVpP6eP5x5',
    to:'ZTX3KZMzKDQH8QRR6QmqR4k8ZrA6nUi5F7zs4',
    nonce: 98,
    amount:'1',
    gasFee: '0.01',
    data:'{"method":"transfer","params":{"to":"ZTX3TXWcXyAjF4ayYpmbDeae8zAJ8roXz18YA","value":"1000000"}}',
    chainId:'2'
}
ZetrixWalletConnect.sendTransaction(obj).then(res => {
    
}).catch(error => {
   
})

Request param:

| param | type | description | | --- | --- | --- | | from | String | Account address of the party initiating the transaction | | to | String | Target account address | | nonce | Int | Account transaction sequence number. The account must be continuous and the nonce of the account must be added by 1 when a new transaction occurs | | amount | String | ZTX transfer quantity; If to is the smart contract address, the number of transfers supported is 0 | | gasFee | String | Transaction prepaid expenses, such as 0.01ZTX pre-paid, the real cost consumed after the transaction is successful will be less than 0.00674 ZTX | | data | String | The contract calls the function, usually a JSON string | | chainId | String | Network environment: 1 Primary network, 2 Test network |

Return Parameter Description:

| param | type | description | | --- | --- | --- | | code | Int | Status code | | data.hash | String | Trading hash | | message | String | Return messages |

resp:

{
  code: 0,
  data: {
    hash: 'f38436d58a1df817bfd6b5e3d1474ca5feced26a8c37beb2591862ba2a01d91d',
  },
  message: ''
}

Status Code Description:

| code | description | promise | | --- | --- | --- | | 0 | Success | Resolve | | 1 | Cancel | Reject |

8. Cancel the authorization

Call this method to cancel the authorization status between the application and the Zetrix Wallet app

ZetrixWalletConnect.disconnect()

webview SDK

With Zetrix-connect-wallet-sdk, the various capabilities of the Zetrix App can also be accessed and used in the webview environment.

The syntax shown below is Javascript ES6, which needs to be translated to run in a webview

1. To initialize the webview SDK

import ZetrixWalletConnect from 'Zetrix-connect-wallet-sdk';
const ZetrixWalletConnect = new ZetrixWalletConnect()

1.1 Customize the App header style

Preload URL Options allows you to define a number of parameters on the URL address, the Zetrix app parses these parameters and prepares all the design styles for you on a native level. Faster, more elegant, easier to configure, less invasive

In fact, the above configuration only requires a string at the end of the URL, for example: https://test-appcredential.Zetrix.com/?navStyle=0&appType=1, no APIs or SDK required.

When Zetrix's WebView reads the query parameters in the URL, it serializes and analyzes them, if the parameters meet the agreed criteria, the WebView pre-configures the layout at the native level according to this configuration.

1.1.1 navStyle

Configure this field to be immersive

0: navigation bar bright color style, the title button is black, and the background is white

1: navigation bar Dark style, the title button is white, and the background is black

f this field is not configured, it is considered non immersive

<img src='data:image/png;base64,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