The D'CENT Web SDK provides functions for signing transaction of coins.
const {connect, utils, providers} = require('near-api-js')
const nearTransaction = require('near-api-js/lib/transaction')
const nearSerialize = require('borsh')
const connectionConfig = {
networkId: "mainnet",
nodeUrl: "https://rpc.mainnet.near.org",
};
const nearConnection = await connect(connectionConfig);
let nonceOfAccessKey = await nearConnection.connection.provider.query({
request_type: 'view_access_key_list',
account_id: address,
finality: 'final'
})
const blockHash = await nearConnection.connection.provider.block({ finality: 'final' }).then(block => {
const encodedBlockHash = block.header.hash
return Buffer.from(bs58Lib.decode(encodedBlockHash))
})
const nonce = ++nonceOfAccessKey;
const publicKey = utils.PublicKey.from(bs58Lib.encode(Buffer.from(address, 'hex')))
var actions = [nearTransaction.transfer(utils.parseNearAmount(BigNumber(amount).toString(10)).replace(',', ''))];
let transaction = new nearTransaction.SignedTransaction({
transaction: {
signerId: address,
publicKey: publicKey,
nonce: nonce,
receiverId: toAddr,
actions: actions,
blockHash: blockHash
},
signature: new nearTransaction.Signature({
keyType: transaction.publicKey.keyType,
})
})
let unsignedTx = nearSerialize.serialize(nearTransaction.SCHEMA, transaction)
const transactionJson = {
coinType: DcentWebConnector.coinType.NEAR,
sigHash: unsignedTx.toString('hex'),
path: `m/44'/397'/0'`,
decimals, // 24
fee,
symbol: 'NEAR',
}
var result
try {
result = await DcentWebConnector.getNearSignedTransaction(transactionJson);
} catch (e) {
console.log(e)
result = e
}
{
"header": {
"version": "1.0",
"response_from": "near",
"status": "success"
},
"body": {
"command": "transaction",
"parameter": {
"signed_tx": "0x31aa13b5e04cb6fc6381ea0520bf7f6727ebdb6e96cd7ca8625bb3e3dd36cf0e2cee4ece13aa9f7ddc09ee10c74aa00af954201829d8016317f10f5a921dcc0d"
}
}
}