openchain-sdk-yxl-wx-request
Version:
openchain sd YxL wx request
52 lines (41 loc) • 1.07 kB
JavaScript
;
const protobuf = require('protobufjs');
const long = require('long');
/**
* contractinvokeByOP Operation
* @param args
* @return {object}
*/
module.exports = function (args) {
try {
const { sourceAddress, contractAddress, opAmount, metadata, input } = args;
const root = protobuf.Root.fromJSON(require('../../crypto/protobuf/bundle.json'));
const payCoin = root.lookupType('protocol.OperationPayCoin');
let opt = {
destAddress: contractAddress,
};
if (opAmount) {
opt.amount = long.fromValue(opAmount);
}
if (input) {
opt.input = input;
}
const payCoinMsg = payCoin.create(opt);
const operation = root.lookupType('protocol.Operation');
const payload = {
payCoin: payCoinMsg,
type: operation.Type.PAY_COIN,
sourceAddress,
};
if (metadata) {
payload.metadata = metadata;
}
const err = operation.verify(payload);
if (err) {
throw Error(err);
}
return operation.create(payload);
} catch (err) {
throw err;
}
};