PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-xtz/test/unit
Просмотр файла: transaction.ts
import assert from 'assert';
import should from 'should';
import { coins } from '@bitgo/statics';
import {
unsignedSerializedOriginationTransaction,
signedSerializedOriginationTransaction,
parsedTransaction,
} from '../resources';
import { XtzLib } from '../../src';
describe('Tezos transaction', function () {
describe('should parse', () => {
it('unsigned transaction', async () => {
const tx = new XtzLib.Transaction(coins.get('txtz'));
await tx.initFromSerializedTransaction(unsignedSerializedOriginationTransaction);
should.equal(tx.inputs.length, 1);
tx.inputs.length.should.equal(1);
tx.inputs[0].address.should.equal('tz1VRjRpVKnv16AVprFH1tkDn4TDfVqA893A');
tx.inputs[0].value.should.equal('1004764');
tx.outputs.length.should.equal(1);
tx.outputs[0].address.should.equal('');
tx.outputs[0].value.should.equal('1000000');
should.not.exist(tx.delegate);
JSON.stringify(tx.toJson()).should.equal(JSON.stringify(parsedTransaction));
tx.toBroadcastFormat().should.equal(unsignedSerializedOriginationTransaction);
});
it('signed transaction', async () => {
const tx = new XtzLib.Transaction(coins.get('txtz'));
await tx.initFromSerializedTransaction(signedSerializedOriginationTransaction);
should.equal(tx.inputs.length, 1);
tx.inputs.length.should.equal(1);
tx.inputs[0].address.should.equal('tz1VRjRpVKnv16AVprFH1tkDn4TDfVqA893A');
tx.inputs[0].value.should.equal('1004764');
tx.outputs.length.should.equal(1);
tx.outputs[0].address.should.equal('KT1LJvp55fbdNwbisJFign9wA4cPgq9T9oc4');
tx.outputs[0].value.should.equal('1000000');
should.not.exist(tx.delegate);
JSON.stringify(tx.toJson()).should.equal(JSON.stringify(parsedTransaction));
tx.toBroadcastFormat().should.equal(signedSerializedOriginationTransaction);
});
});
describe('should sign', () => {
it('an unsigned origination transaction', async () => {
const tx = new XtzLib.Transaction(coins.get('txtz'));
await tx.initFromSerializedTransaction(unsignedSerializedOriginationTransaction);
const signer = new XtzLib.KeyPair({ prv: 'spsk2cbiVsAvpGKmau9XcMscL3NRwjkyT575N5AyAofcoj41x6g6TL' });
await tx.sign(signer);
should.equal(tx.inputs.length, 1);
tx.inputs.length.should.equal(1);
tx.inputs[0].address.should.equal('tz1VRjRpVKnv16AVprFH1tkDn4TDfVqA893A');
tx.inputs[0].value.should.equal('1004764');
tx.outputs.length.should.equal(1);
tx.outputs[0].address.should.equal('KT1Dh62qPZhJvMMtL4rAnDS2uASptT6GNLMy');
tx.outputs[0].value.should.equal('1000000');
should.not.exist(tx.delegate);
tx.signature.length.should.equal(1);
tx.signature[0].should.equal(
'sigu3cjQh8rf79aXG555fRxKzuTa2byZnvMJqkJENpdKjEwCri6SUM9fLywDC3w8e6dHRT8RRaJVQiijC9yzwqL6FSm2Jj9a'
);
});
it('a signed origination transaction', async () => {
const tx = new XtzLib.Transaction(coins.get('txtz'));
await tx.initFromSerializedTransaction(signedSerializedOriginationTransaction);
const signer = new XtzLib.KeyPair({ prv: 'spsk2cbiVsAvpGKmau9XcMscL3NRwjkyT575N5AyAofcoj41x6g6TL' });
await tx.sign(signer);
should.equal(tx.inputs.length, 1);
tx.inputs.length.should.equal(1);
tx.inputs[0].address.should.equal('tz1VRjRpVKnv16AVprFH1tkDn4TDfVqA893A');
tx.inputs[0].value.should.equal('1004764');
tx.outputs.length.should.equal(1);
tx.outputs[0].address.should.equal('KT1Dh62qPZhJvMMtL4rAnDS2uASptT6GNLMy');
tx.outputs[0].value.should.equal('1000000');
should.not.exist(tx.delegate);
tx.signature.length.should.equal(1);
tx.signature[0].should.equal(
'sigu3cjQh8rf79aXG555fRxKzuTa2byZnvMJqkJENpdKjEwCri6SUM9fLywDC3w8e6dHRT8RRaJVQiijC9yzwqL6FSm2Jj9a'
);
});
});
describe('should fail', () => {
it('to parse and invalid parsed transaction', async () => {
const tx = new XtzLib.Transaction(coins.get('txtz'));
await tx.initFromParsedTransaction({} as XtzLib.Interface.ParsedTransaction).should.be.rejected();
});
it('to get the transaction JSON if it is empty', async () => {
const tx = new XtzLib.Transaction(coins.get('txtz'));
assert.throws(() => tx.toJson());
});
it('to sign if the transaction is empty', async () => {
const tx = new XtzLib.Transaction(coins.get('txtz'));
const signer = new XtzLib.KeyPair({ prv: 'spsk2cbiVsAvpGKmau9XcMscL3NRwjkyT575N5AyAofcoj41x6g6TL' });
await tx.sign(signer).should.be.rejectedWith('Empty transaction');
});
it('to sign the transaction if the keys are invalid', async () => {
const tx = new XtzLib.Transaction(coins.get('txtz'));
await tx.initFromParsedTransaction(parsedTransaction);
const signer = new XtzLib.KeyPair({ pub: 'sppk7ZWB8diU2TWehxdkWCV2DTFvn1hPz4qLjiD3nJQozKnoSEnSC8b' });
await tx.sign(signer).should.be.rejectedWith('Missing private key');
});
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!