openchain-sdk-yxl-ts
Version:
OpenChain SDK for browser
60 lines (47 loc) • 1.35 kB
JavaScript
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;
}
};