PHP WebShell

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

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

import should from 'should';
import { TransactionType, AddressFormat } from '@bitgo/sdk-core';
import * as testData from '../resources';
import { KeyPair, TransactionBuilderFactory } from '../../src';
import { coins } from '@bitgo/statics';
import { CertType, Transaction } from '../../src/lib/transaction';
import * as Utils from '../../src/lib/utils';

describe('ADA Staking Activate Transaction Builder', async () => {
  const factory = new TransactionBuilderFactory(coins.get('tada'));

  it('start and build an unsigned staking activate tx', async () => {
    const keyPairStake = new KeyPair({ prv: testData.privateKeys.prvKey2 });
    const txBuilder = factory.getStakingActivateBuilder();
    txBuilder.input({
      transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba21',
      transaction_index: 1,
    });
    const totalInput = '4000000';
    txBuilder.changeAddress(
      'addr1q8rm9z7w4yx5gz652kn2q238efvms6t0qelur9nlglun8eu4tr5knj4fu4adelzqhxg8adu5xca4jra0gtllfrpcawyq9psz23',
      totalInput
    );
    txBuilder.stakingCredential(
      keyPairStake.getKeys().pub,
      '7a623c48348501c2380e60ac2307fcd1b67df4218f819930821a15b3',
      'always-abstain'
    );
    txBuilder.ttl(800000000);
    const tx = (await txBuilder.build()) as Transaction;
    should.equal(tx.type, TransactionType.StakingActivate);
    const txData = tx.toJson();
    const fee = tx.getFee;
    txData.certs.length.should.equal(3);
    txData.certs[0].type.should.equal(0);
    txData.certs[1].type.should.equal(1);
    txData.certs[2].type.should.equal(CertType.VoteDelegation);

    txData.outputs.length.should.equal(1);
    txData.outputs[0].amount.should.equal((Number(totalInput) - 2000000 - Number(fee)).toString());
    fee.should.equal('171529');
    tx.toBroadcastFormat().should.equal(testData.rawTx.unsignedStakingActiveTx);
    should.equal(tx.id, testData.rawTx.unsignedStakingActiveTxHash);
  });

  it('should explain a tx', async () => {
    const keyPairStake = new KeyPair({ prv: testData.privateKeys.prvKey2 });
    const txBuilder = factory.getStakingActivateBuilder();
    txBuilder.input({
      transaction_id: '3677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba21',
      transaction_index: 1,
    });
    const totalInput = '4000000';
    txBuilder.changeAddress(
      'addr1q8rm9z7w4yx5gz652kn2q238efvms6t0qelur9nlglun8eu4tr5knj4fu4adelzqhxg8adu5xca4jra0gtllfrpcawyq9psz23',
      totalInput
    );
    txBuilder.stakingCredential(
      keyPairStake.getKeys().pub,
      '7a623c48348501c2380e60ac2307fcd1b67df4218f819930821a15b3',
      'always-abstain'
    );
    txBuilder.ttl(800000000);
    const tx = (await txBuilder.build()) as Transaction;
    should.equal(tx.type, TransactionType.StakingActivate);
    tx.explainTransaction();
  });

  // it('build a stakingActivate from rawTx', async () => {
  //   const txBuilder = factory.from(testData.rawTx.unsignedStakingActiveTx);
  //   const builtTx = (await txBuilder.build()) as Transaction;
  //   should.equal(builtTx.type, TransactionType.StakingActivate);
  //   should.equal(builtTx.id, testData.rawTx.unsignedStakingActiveTxHash);
  //   const txData = builtTx.toJson();
  //   const fee = builtTx.getFee;
  //   txData.certs.length.should.equal(2);
  //   txData.certs[0].type.should.equal(0);
  //   txData.certs[1].type.should.equal(1);
  //
  //   txData.outputs.length.should.equal(1);
  //   const totalInput = '4000000';
  //   txData.outputs[0].amount.should.equal((Number(totalInput) - 2000000 - Number(fee)).toString());
  //   fee.should.equal('174389');
  // });

  // it('should submit a staking activate transaction', async () => {
  //   const keyPair = new KeyPair({ prv: testData.privateKeys.prvKey9 });
  //   const keyPairStaking = new KeyPair({ prv: testData.privateKeys.prvKey10 });
  //   const senderAddress = Utils.default.createBaseAddressWithStakeAndPaymentKey(
  //     keyPairStaking,
  //     keyPair,
  //     AddressFormat.testnet
  //   );
  //   const axiosConfig = {
  //     headers: {
  //       'Content-Type': 'application/cbor',
  //     },
  //     timeout: 10000,
  //   };
  //
  //   const txBuilder = factory.getStakingActivateBuilder();
  //   const utxoData = await axios.get('https://testnet.koios.rest/api/v0/address_info?_address=' + senderAddress);
  //   const senderBalance = utxoData.data[0].balance;
  //   txBuilder.changeAddress(senderAddress, senderBalance);
  //   const utxoSet = utxoData.data[0].utxo_set;
  //   for (const utxo of utxoSet) {
  //     txBuilder.input({ transaction_id: utxo.tx_hash, transaction_index: utxo.tx_index });
  //   }
  //
  //   txBuilder.ttl(800000000);
  //   txBuilder.stakingCredential(
  //     keyPairStaking.getKeys().pub,
  //     '7a623c48348501c2380e60ac2307fcd1b67df4218f819930821a15b3'
  //   );
  //   txBuilder.sign({ key: keyPair.getKeys().prv });
  //   txBuilder.sign({ key: keyPairStaking.getKeys().prv });
  //
  //   const tx = await txBuilder.build();
  //   const serializedTx = tx.toBroadcastFormat();
  //   const bytes = Uint8Array.from(Buffer.from(serializedTx, 'hex'));
  //
  //   try {
  //     const res = await axios.post('https://testnet.koios.rest/api/v0/submittx', bytes, axiosConfig);
  //     console.log(res);
  //   } catch (err) {
  //     console.log(err);
  //   }
  // });

  it('should submit a staking transaction using signature interface', async () => {
    const keyPairPayment = new KeyPair({ prv: testData.privateKeys.prvKey9 });
    const keyPairStake = new KeyPair({ prv: testData.privateKeys.prvKey10 });
    const senderAddress = Utils.default.createBaseAddressWithStakeAndPaymentKey(
      keyPairStake,
      keyPairPayment,
      AddressFormat.testnet
    );
    const txBuilder = factory.getStakingActivateBuilder();
    const senderBalance = '22122071';
    txBuilder.changeAddress(senderAddress, senderBalance);
    txBuilder.stakingCredential(
      keyPairStake.getKeys().pub,
      '7a623c48348501c2380e60ac2307fcd1b67df4218f819930821a15b3',
      'always-no-confidence'
    );

    txBuilder.input({
      transaction_id: '0a4f80d83ba9ce1f83306a79252909241308d7eff317d04c9ea018966d687fe3',
      transaction_index: 0,
    });

    txBuilder.ttl(900000000);

    const unsignedTx = await txBuilder.build();
    const signableHex = unsignedTx.signablePayload.toString('hex');
    const serializedTx = unsignedTx.toBroadcastFormat();
    txBuilder.sign({ key: keyPairPayment.getKeys().prv });
    txBuilder.sign({ key: keyPairStake.getKeys().prv });
    const signedTransaction = await txBuilder.build();
    const serializedTransaction = signedTransaction.toBroadcastFormat();

    const txBuilder2 = factory.from(serializedTx);
    const tx = await txBuilder2.build();
    tx.type.should.equal(TransactionType.StakingActivate);
    const signableHex2 = tx.signablePayload.toString('hex');
    signableHex.should.equal(signableHex2);
    const signaturePayment = keyPairPayment.signMessage(signableHex2);
    const signatureStake = keyPairStake.signMessage(signableHex2);
    txBuilder2.addSignature({ pub: keyPairPayment.getKeys().pub }, Buffer.from(signaturePayment));
    txBuilder2.addSignature({ pub: keyPairStake.getKeys().pub }, Buffer.from(signatureStake));
    const signedTransaction2 = await txBuilder2.build();
    signedTransaction.id.should.equal(tx.id);
    const serializedTransaction2 = signedTransaction2.toBroadcastFormat();
    serializedTransaction2.should.equal(serializedTransaction);
  });

  it('should submit a staking transaction using one signature', async () => {
    const keyPairPayment = new KeyPair({ prv: testData.privateKeys.prvKey9 });
    const keyPairStake = keyPairPayment;
    const senderAddress = Utils.default.createBaseAddressWithStakeAndPaymentKey(
      keyPairStake,
      keyPairPayment,
      AddressFormat.testnet
    );
    const txBuilder = factory.getStakingActivateBuilder();
    const senderBalance = '22122071';
    txBuilder.changeAddress(senderAddress, senderBalance);
    txBuilder.stakingCredential(
      keyPairStake.getKeys().pub,
      '7a623c48348501c2380e60ac2307fcd1b67df4218f819930821a15b3',
      'always-no-confidence'
    );

    txBuilder.input({
      transaction_id: '0a4f80d83ba9ce1f83306a79252909241308d7eff317d04c9ea018966d687fe3',
      transaction_index: 0,
    });

    txBuilder.ttl(900000000);

    const unsignedTx = await txBuilder.build();
    const signableHex = unsignedTx.signablePayload.toString('hex');
    const serializedTx = unsignedTx.toBroadcastFormat();
    txBuilder.sign({ key: keyPairPayment.getKeys().prv });
    const signedTransaction = await txBuilder.build();
    const serializedTransaction = signedTransaction.toBroadcastFormat();

    const txBuilder2 = factory.from(serializedTx);
    const tx = await txBuilder2.build();
    tx.type.should.equal(TransactionType.StakingActivate);
    const signableHex2 = tx.signablePayload.toString('hex');
    signableHex.should.equal(signableHex2);
    const signaturePayment = keyPairPayment.signMessage(signableHex2);
    txBuilder2.addSignature({ pub: keyPairPayment.getKeys().pub }, Buffer.from(signaturePayment));
    const signedTransaction2 = await txBuilder2.build();
    signedTransaction.id.should.equal(tx.id);
    const serializedTransaction2 = signedTransaction2.toBroadcastFormat();
    serializedTransaction2.should.equal(serializedTransaction);
  });
});

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


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