UNPKG

test-triam-base-contract

Version:

Low level triam smart cotnract support library

75 lines (64 loc) 1.94 kB
import {default as xdr} from "./generated/stellar-xdr_generated"; import clone from 'lodash/clone'; import padEnd from 'lodash/padEnd'; import trimEnd from 'lodash/trimEnd'; /** * ContractInput class represents an input of contract operations * * @constructor * @param {string} funcName - The function name. * @param {Array} contractParams - The contract parameters. */ export class ContractInput { constructor(funcName, contractParams) { this.funcName = funcName; let paramsJson = JSON.stringify(contractParams); // array of Buffer let ab = str2ab(paramsJson); // buffer let buf = toBuffer(ab); this.contractParams = buf; } /** * Returns an contractInput object from its XDR object representation. * @param {xdr.ContractInput} contractInputXdr - The contractInput xdr object. * @returns {ContractInput} */ static fromOperation(contractInputXdr) { let funcName, contractParams; funcName = contractInputXdr.funcName().toString('ascii'); // to array let buf = contractInputXdr.contractParams(); let ab = toArrayBuffer(buf); let str = ab2str(ab); contractParams = JSON.parse(str); return new this(funcName, contractParams); } } function ab2str(buf) { return String.fromCharCode.apply (null, new Uint16Array (buf)); }; function str2ab(str) { let buf = new ArrayBuffer (str.length * 2); // 2 bytes for each char let bufView = new Uint16Array (buf); for (let i = 0, strLen = str.length; i < strLen; i++) { bufView[i] = str.charCodeAt (i); } return buf; } function toArrayBuffer(buf) { let ab = new ArrayBuffer (buf.length); let view = new Uint8Array (ab); for (let i = 0; i < buf.length; ++i) { view[i] = buf[i]; } return ab; } function toBuffer(ab){ let buf = new Buffer (ab.byteLength); let view = new Uint8Array (ab); for (let i = 0; i < buf.length; ++i) { buf[i] = view[i]; } return buf; }