NEAR
The following is an explanation of how to initiate a transfer transaction in NEAR network by invoking the through dapp.request
. We recommend utilizing a dedicated library rather than accessing the service directly if you want a greater degree of abstraction than the official API provides.
To send a transaction in NEAR network, it needs to be followed the steps below.
- Detecting of Universal Provider (
window.dapp
) - Detecting the NEAR network to which the user is linked
- Import the NEAR account of the user
The WELLDONE Wallet finds and imports networks associated with that wallet address. Before submitting a transaction, you should evaluate whether to transmit it to the mainnet or the testnet. The following format can be used to transmit the transaction:
const response = await dapp.request('near', {
method: 'dapp:signAndSendTransaction',
params: [HEX_STRING_TX_DATA],
});
1. Returns
This method returns the transaction hash value as a Promise
object of type string because you can send multiple transactions as well as one transaction.
Promise<string[]>;
2. Params
type HEX_STRING_TX_DATA = string;
HEX_STRING_TX_DATA
must be passed to the parameter in order for a transaction to be sent from NEAR. Thenear-api-js
library can provide these values, and the link and the example below can explain their detailed usage.
3. Example
import { providers, transactions, utils } from 'near-api-js';
const getSerializedTransaction = async ( accounts ) => {
const rpc = 'https://rpc.testnet.near.org';
const provider = new providers.JsonRpcProvider(rpc);
const accountLocal = currentAccount['near'].address;
const publicKey = currentAccount['near'].pubKey;
const signerId = accountLocal;
const accessKey = await provider.query(`access_key/${signerId}/${publicKey}`, '');
const actions = [transactions.transfer(new BN(10))];
const recentBlockHash = utils.serialize.base_decode(accessKey.block_hash);
const transaction = transactions.createTransaction(
accountLocal,
utils.PublicKey.fromString(publicKey),
accountLocal, // send to yourself
accessKey.nonce + 1,
actions,
recentBlockHash,
);
const bytes = transaction.encode();
return Buffer.from(bytes).toString('hex');
};
const sendTransaction = async = () => {
// get accounts first
const accounts = await dapp.request('near', { method: 'dapp:accounts' });
const HEX_STRING_TX_DATA = await getSerializedTransaction(accounts);
// sending a transaction
try{
const response = await dapp.request('near' ,{
method: 'dapp:signAndSendTransaction',
params: [
// use serialized transaction
[`0x${HEX_STRING_TX_DATA}`]
]
});
const txHash = response[0];
} catch (error) {
/*
{
message: 'User denied transaction signature',
code: 4001,
}
*/
}
}
To complete the transaction, follow the steps outlined below. The testnet token is required to transmit a transaction. You can request faucet through the FAUCET tab in the wallet.