test-triam-base-contract
Version:
Low level triam smart cotnract support library
75 lines (64 loc) • 1.94 kB
JavaScript
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;
}