PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-eth/test/unit/transactionBuilder

Просмотр файла: contractCall.ts

import should from 'should';
import { TransactionBuilder } from '../../../src';
import { TransactionType } from '@bitgo/sdk-core';
import * as testData from '../../resources/eth';
import { getBuilder } from '../getBuilder';

describe('Eth contract call transaction builder', () => {
  let txBuilder;
  let contractAddress;
  const rawTx =
    '0xf889398506fc23ac0083be8c72947fc37878dca69c9ac48397500279305f798b157280a42bf90baacecf367fdc11132a0ccfeb91692cb31ff126083c353459e0572a0b34c48e952377a0206c902a536c5327ea2861965538963b6180f7d13e36ffd4abb7aa9628f72eb9a05ee209b7b02a2ea3fbf6033701d6e959dfc1e78452235245cf2b8d3f9110c6af';

  beforeEach(() => {
    contractAddress = '0x8f977e912ef500548a0c3be6ddde9899f1199b81';
    // testData.KEYPAIR_PRV.getKeys().prv as string;
    txBuilder = getBuilder('teth') as TransactionBuilder;
    txBuilder.type(TransactionType.ContractCall);
    txBuilder.fee({
      fee: '30000000000',
      gasLimit: '12487794',
    });
    txBuilder.counter(57);
  });

  it('should build a contract call type transaction', async () => {
    txBuilder.contract('0x7Fc37878DCa69C9AC48397500279305F798b1572');
    txBuilder.data('0x2bf90baacecf367fdc11132a0ccfeb91692cb31ff126083c353459e0572a0b34c48e9523');
    txBuilder.sign({ key: '064A3BF8B08A3426E8A719AE5E4115228A75E7A1449CB1B734E51C7DC8A867BE' });
    const tx = await txBuilder.build();
    should.exist(tx);
    should.equal(tx.toBroadcastFormat(), rawTx);
  });

  it('should deserialize an serialize raw transaction', async () => {
    txBuilder.from(rawTx);
    const tx = await txBuilder.build();
    should.equal(tx.toBroadcastFormat(), rawTx);
  });

  it('should build a contract call type transaction, deserialize it, sign it and serialize it again', async () => {
    txBuilder.contract('0x7Fc37878DCa69C9AC48397500279305F798b1572');
    txBuilder.data('0x2bf90baacecf367fdc11132a0ccfeb91692cb31ff126083c353459e0572a0b34c48e9523');
    const txUnsigned = await txBuilder.build();

    const builderFrom = getBuilder('teth') as TransactionBuilder;
    builderFrom.from(txUnsigned.toBroadcastFormat());
    builderFrom.sign({ key: '064A3BF8B08A3426E8A719AE5E4115228A75E7A1449CB1B734E51C7DC8A867BE' });
    const tx = await builderFrom.build();

    should.equal(tx.toBroadcastFormat(), rawTx);
    should.equal(txUnsigned.toJson().v, '0x77');
  });

  it('should thrown if contract or data is missing', async () => {
    await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract address');
    txBuilder.contract(contractAddress);
    await txBuilder.build().should.be.rejectedWith('Invalid transaction: missing contract call data field');
  });

  it('should properly build tx for eth2 staking staking deposit', async () => {
    txBuilder.contract(testData.ETH2_STAKING_CONTRACT_ADDRESS);
    txBuilder.data(testData.ETH2_STAKING_CONTRACT_DATA);
    txBuilder.sign({ key: '064A3BF8B08A3426E8A719AE5E4115228A75E7A1449CB1B734E51C7DC8A867BE' });

    const tx = await txBuilder.build();
    should.exist(tx);

    const txData = tx.toJson();
    should.equal(txData.to, testData.ETH2_STAKING_CONTRACT_ADDRESS);
    should.equal(txData.from, '0x14fc903e3025a3aad66fad7a7862b1ec232f8df2');
    should.equal(txData.data, testData.ETH2_STAKING_CONTRACT_DATA);
    should.equal(txData.nonce, 57);
    should.equal(txData.chainId, '0x2a');
  });
});

Выполнить команду


Для локальной разработки. Не используйте в интернете!