openchain-sdk-yxl-wx-request
Version:
openchain sd YxL wx request
110 lines (86 loc) • 2.83 kB
JavaScript
;
require('chai').should();
const BigNumber = require('bignumber.js');
const co = require('co');
const OpenChainSDK = require('../index');
const sdk = new OpenChainSDK({
host: 'nodeapitest.yuxinlink.com',
});
describe('Test contract invoke by asset operation transaction', function() {
it('test contract invoke by asset operation' , function() {
const privateKey = 'private key';
const sourceAddress = 'YxLVyL2Rr6u9nFpVdq16ycTJ3HssQBuc9BAVz';
// const contractAddress = 'YxLVdxKt6FJUTXCsdjSCEdMg4dSynBqTqLSnb';
const contractAddress = 'YxLVyL2Rr6u9nFpVdq16ycTJ3HssQBuc9BAVz';
co(function* () {
const result = yield sdk.account.getNonce(sourceAddress);
if (result.errorCode !== 0) {
console.log(result);
return;
}
let nonce = result.result.nonce;
nonce = new BigNumber(nonce).plus(1).toString(10);
let contractinvokeByOPOperation = yield sdk.operation.contractInvokeByAssetOperation({
contractAddress,
sourceAddress,
assetAmount: '1000',
input: 'aaaa',
code: 'leo',
issuer: 'YxLVkMLxmJEtDQEob3SvVnZGjp7XrWSDvKm7a',
// metadata: 'Test contract create operation',
});
if (contractinvokeByOPOperation.errorCode !== 0) {
console.log(contractinvokeByOPOperation);
return;
}
// console.log(contractinvokeByOPOperation);
// return;
const operationItem = contractinvokeByOPOperation.result.operation;
const args = {
sourceAddress,
nonce,
operations: [operationItem],
signtureNumber: '100',
// metadata: 'Test evaluation fee',
};
let feeData = yield sdk.transaction.evaluateFee(args);
if (feeData.errorCode !== 0) {
console.log(feeData);
return;
}
let feeLimit = feeData.result.feeLimit;
let gasPrice = feeData.result.gasPrice;
// 2. build blob
let blobInfo = sdk.transaction.buildBlob({
sourceAddress: sourceAddress,
gasPrice,
feeLimit,
nonce: nonce,
operations: [ operationItem ],
});
if (blobInfo.errorCode !== 0) {
console.log(blobInfo);
return;
}
let blob = blobInfo.result.transactionBlob;
// 3. sign blob
let signatureInfo = sdk.transaction.sign({
privateKeys: [ privateKey ],
blob,
});
if (signatureInfo.errorCode !== 0) {
console.log(signatureInfo);
return;
}
let signature = signatureInfo.result.signatures;
// 4. submit transaction
let transactionInfo = yield sdk.transaction.submit({
blob,
signature: signature,
});
console.log(transactionInfo);
}).catch(err => {
console.log(err);
});
});
});