import { Transaction } from '../src/transaction'; import { RLPSign } from '../src/utils'; import { TxStatus } from '../src/types'; import { HttpProvider, Messenger } from '@harmony-js/network'; import { isAddress, ChainType, hexToBN } from '@harmony-js/utils'; import { getAddressFromPrivateKey, BN } from '@harmony-js/crypto'; import txnVectors from './transactions.fixture.json'; const provider = new HttpProvider('http://localhost:9500'); describe('test sign tranction', () => { it('should test sign transaction with ETH settings', () => { const ethMessenger = new Messenger(provider, ChainType.Ethereum); // tslint:disable-next-line: prefer-for-of for (let i = 0; i < txnVectors.length; i += 1) { const vector = txnVectors[i]; const address = getAddressFromPrivateKey(vector.privateKey); expect(isAddress(address)).toEqual(true); expect(address).toEqual(vector.accountAddress); const transaction: Transaction = new Transaction( { gasLimit: vector.gasLimit && vector.gasLimit !== '0x' ? hexToBN(vector.gasLimit) : new BN(0), gasPrice: vector.gasPrice && vector.gasPrice !== '0x' ? hexToBN(vector.gasPrice) : new BN(0), to: vector.to || '0x', value: vector.value && vector.value !== '0x' ? hexToBN(vector.value) : new BN(0), data: vector.data || '0x', nonce: vector.nonce && vector.nonce !== '0x' ? hexToBN(vector.nonce).toNumber() : 0, }, ethMessenger, TxStatus.INTIALIZED, ); const unsigned = transaction.getRLPUnsigned(); expect(unsigned[0]).toEqual(vector.unsignedTransaction); const signed = RLPSign(transaction, vector.privateKey); expect(signed[1]).toEqual(vector.signedTransaction); } }); it('should test recover from ETHSignedtransaction', () => { const ethMessenger = new Messenger(provider, ChainType.Ethereum); // tslint:disable-next-line: prefer-for-of for (let i = 0; i < txnVectors.length; i += 1) { const vector = txnVectors[i]; const transaction: Transaction = new Transaction( {}, ethMessenger, TxStatus.INTIALIZED, ); transaction.recover(vector.signedTransaction); if (vector.gasLimit && vector.gasLimit !== '0x') { expect(transaction.txParams.gasLimit.toString()).toEqual( hexToBN(vector.gasLimit).toString(), ); } if (vector.gasPrice && vector.gasPrice !== '0x') { expect(transaction.txParams.gasPrice.toString()).toEqual( hexToBN(vector.gasPrice).toString(), ); } if (vector.nonce && vector.nonce !== '0x') { expect(transaction.txParams.nonce).toEqual( hexToBN(vector.nonce).toNumber(), ); } if (vector.data) { expect(transaction.txParams.data).toEqual(vector.data); } if (vector.value && vector.value !== '0x') { expect(transaction.txParams.value.toString()).toEqual( hexToBN(vector.value).toString(), ); } if (vector.to && vector.to !== '0x') { expect(transaction.txParams.to).toEqual(vector.to); } expect(transaction.txParams.from).toEqual(vector.accountAddress); } }); });