Using Solong in Dapp

Solong
3 min readOct 27, 2020

Dapps can use ‘solong’ object which injected to window to interact with solong extension

A typical process acts like this:

  • S1: Check user has installed SolongExtension
  • S2: Ask for authorize for user’s account
  • S3: You can call transfer to do assets transfer
  • S4: Construct your “@solana/web3.js” Transaction object,call the api for user the sign,then send your transaction

1. Check user has installed SolongExtension

Dapps can directly check the global “solong” object is existed or not,if yes,indicates that the user has installed solong,otherwise, can take the user to chrome extension store for install.

if (!solong) { console.log("please install Solong Extension from chrome") }

solong equals to window.solong in explorer, we suggested always do the check before your actions,

2. Authorize user’s account

Dapps can provide a button,like “Connect” then call API ‘selectAccount’, like the following code:

solong.selectAccount().then(account) => { console.log("connect account with ", account) } )

if this site is already authorized for the current account,then can get the account right after the call, or solong will pop up a window for user’s authorization:

After the authorization,we get the account:

select account: 9HAjDw4onTxxxxxxxxxxxxxxxxHNigen

The “selectAccount” api will return a Promise ,which resolve with the user’s account

3. Transfer

For Dapp want to do transfer,it can call api “transfer” like:

async transfer(to, amount)

it also returns a Promise ,if it resolves with no error, the transfer is successful. Param ‘to’ is the receiver’s address, ‘amount’ is the amount of assets you want to transfer

Attention: amount is not lamport here

solong.transfer('HSfwVfB7RUF1SKCd4yrz8KZp7TU262Y5BeZZN1tdCTVk', 0.1).then((err)=>{ if (!err){ console.log("transfer error:", err) } else { console.log("transfer success") } })

After the api call,solong will pop up this window to user for transfer confirmation:

After the confirmation,the transfer is done

4. Sign Transaction

For most use cases for dapps is to use solong’s api to signTransaction to sign transaction,after the sign. You can call api sendTransaction of "@solana/web3.js"' to Solana nodes.

async signTransaction(transaction)

Before the api call,you should construct a transaction first, take the following code as an example.

const trxi = Token.createTransferInstruction( new PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'), new PublicKey('6xe4WTMLrcrxae196V4PLhNpqWgzmFqJw1CLVvWHkw4U'), new PublicKey('CMaGy8RNmNx5zZ1cdaV4ajtSKNZQKQz2VqAGdmkBdz1B'), new PublicKey('HSfwVfB7RUF1SKCd4yrz8KZp7TU262Y5BeZZN1tdCTVk'), [], 100000 ) const trx= new Transaction().add(trxi); trx.recentBlockhash = ( await connection.getRecentBlockhash('max') ).blockhash trx.signPartial(new PublicKey(this.currentAccount)) let signedTrx = await solong.signTransaction(trx) connection.sendRawTransaction(signedTrx.serialize()).then((rst) => { console.log('send raw transaction:', rst) })

We also make use of Token from spl-token:

import {Token} from '@solana/spl-token'

We use Token to construct a TransferInstruction, then add it to Transaction . After setting recentBlockhash and signPartial,we can call solong.signTransaction to pop up the window for user to sign:

After confirmation,we can call transaction’s serialize() function to generate RawTransaction for sending to api node.

--

--