UNPKG

openchain-sdk-yxl-ts

Version:

OpenChain SDK for browser

60 lines (47 loc) 1.35 kB
import protobuf from 'protobufjs'; import long from 'long'; import bundleJson from '../../crypto/protobuf/bundle.js'; /** * payAsset operation * @param args * @return {payload} */ export default function (args) { try { const { sourceAddress, destAddress, code, issuer, assetAmount, metadata } = args; const root = protobuf.Root.fromJSON(bundleJson); const assetKey = root.lookupType('protocol.AssetKey'); const assetKeyMsg = assetKey.create({ issuer, code, }); const asset = root.lookupType('protocol.Asset'); const assetMsg = asset.create({ key: assetKeyMsg, amount: long.fromValue(assetAmount), }); const operationPayAsset = root.lookupType('protocol.OperationPayAsset'); const operationPayAssetMsg = operationPayAsset.create({ destAddress, asset: assetMsg, }); const operation = root.lookupType('protocol.Operation'); const payload = { payAsset: operationPayAssetMsg, type: operation.Type.PAY_ASSET, }; if (sourceAddress) { payload.sourceAddress = sourceAddress; } if (metadata) { payload.metadata = Buffer.from(metadata, 'utf8'); } const err = operation.verify(payload); if (err) { throw Error(err); } return operation.create(payload); } catch (err) { throw err; } };