Skip to content

Commit

Permalink
remove peglib, improvements in structure
Browse files Browse the repository at this point in the history
  • Loading branch information
ed-iov committed Nov 22, 2023
1 parent e4c4950 commit 607e62f
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 129 deletions.
58 changes: 36 additions & 22 deletions tests/01_05_57-post_hop_active_powpeg_redeem_script.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,44 @@ const chai = require('chai');
chai.use(require('chai-as-promised'));
const expect = chai.expect;

const rsk = require('peglib').rsk;
const redeemScriptParser = require('@rsksmart/powpeg-redeemscript-parser');
const CustomError = require('../lib/CustomError');
const removePrefix0x = require("../lib/utils").removePrefix0x;
const { GENESIS_FEDERATION_ADDRESS, GENESIS_FEDERATION_REDEEM_SCRIPT } = require('../lib/constants');

const removePrefix0x = require('../lib/utils').removePrefix0x;
const {getRskTransactionHelpers} = require('../lib/rsk-tx-helper-provider');
const {getBridge, getLatestActiveForkName} = require('../lib/precompiled-abi-forks-util');
const {GENESIS_FEDERATION_ADDRESS, GENESIS_FEDERATION_REDEEM_SCRIPT} = require('../lib/constants');
const {activateFork} = require('../lib/rsk-utils');
/**
* Takes the blockchain to the required state for this test file to run in isolation.
*/
const fulfillRequirementsToRunAsSingleTestFile = async () => {
await activateFork(Runners.common.forks.hop400);
};
describe('Calling getActivePowpegRedeemScript method after hop', function() {
let rskTxHelpers;
let rskTxHelper;
let bridge;
before(async () => {
if (process.env.RUNNING_SINGLE_TEST_FILE) {
await fulfillRequirementsToRunAsSingleTestFile();
}
rskTxHelpers = getRskTransactionHelpers();
rskTxHelper = rskTxHelpers[0];
bridge = getBridge(rskTxHelper.getClient(), await getLatestActiveForkName());
});

it('should return the active powpeg redeem script', async () => {
try {
const activePowpegRedeemScript = await bridge.methods.getActivePowpegRedeemScript().call();
const activeFederationAddressFromBridge = await bridge.methods.getFederationAddress().call();
const addressFromRedeemScript = redeemScriptParser.getAddressFromRedeemScript(
'REGTEST', Buffer.from(removePrefix0x(activePowpegRedeemScript), 'hex'),
);

before(() => {
rskClient = rsk.getClient(Runners.hosts.federate.host);
});

it('should return the active powpeg redeem script', async () => {
try{
const activePowpegRedeemScript = await rskClient.rsk.bridge.methods.getActivePowpegRedeemScript().call();
const activeFederationAddressFromBridge = await rskClient.rsk.bridge.methods.getFederationAddress().call();
const addressFromRedeemScript = redeemScriptParser.getAddressFromRedeemScript(
'REGTEST', Buffer.from(removePrefix0x(activePowpegRedeemScript), 'hex')
);

expect(activePowpegRedeemScript).to.eq(GENESIS_FEDERATION_REDEEM_SCRIPT);
expect(addressFromRedeemScript).to.eq(GENESIS_FEDERATION_ADDRESS).to.eq(activeFederationAddressFromBridge);
} catch (err) {
throw new CustomError('getActivePowpegRedeemScript method validation failure', err);
}
})
expect(activePowpegRedeemScript).to.eq(GENESIS_FEDERATION_REDEEM_SCRIPT);
expect(addressFromRedeemScript).to.eq(GENESIS_FEDERATION_ADDRESS).to.eq(activeFederationAddressFromBridge);
} catch (err) {
throw new CustomError('getActivePowpegRedeemScript method validation failure', err);
}
});
});
72 changes: 50 additions & 22 deletions tests/03_02_01-last_fork_active_powpeg_redeem_script.js
Original file line number Diff line number Diff line change
@@ -1,32 +1,60 @@
const chai = require('chai');
chai.use(require('chai-as-promised'));
const expect = chai.expect;

const rsk = require('peglib').rsk;
const redeemScriptParser = require('@rsksmart/powpeg-redeemscript-parser');
const {getRskTransactionHelpers} = require('../lib/rsk-tx-helper-provider');
const {getBridge, getLatestActiveForkName} = require('../lib/precompiled-abi-forks-util');
const CustomError = require('../lib/CustomError');
const removePrefix0x = require("../lib/utils").removePrefix0x;
const { GENESIS_FEDERATION_ADDRESS, GENESIS_FEDERATION_REDEEM_SCRIPT } = require('../lib/constants');
let rskClient;
const {disableWhitelisting} = require('../lib/2wp-utils');
const removePrefix0x = require('../lib/utils').removePrefix0x;
const {getBtcClient} = require('../lib/btc-client-provider');
const rskUtils = require('../lib/rsk-utils');
const {
GENESIS_FEDERATION_ADDRESS,
GENESIS_FEDERATION_REDEEM_SCRIPT,
} = require('../lib/constants');

const fulfillRequirementsToRunAsSingleTestFile = async (rskTxHelper, btcTxHelper) => {
const latestForkName = rskUtils.getLatestForkName();
await rskUtils.activateFork(latestForkName);
await disableWhitelisting(rskTxHelper, btcTxHelper);
};

describe('Calling getActivePowpegRedeemScript method after last fork before fedchange', function() {
let rskTxHelpers;
let rskTxHelper;
let bridge;

before(async () => {
const btcTxHelper = getBtcClient();

before(() => {
rskClient = rsk.getClient(Runners.hosts.federate.host);
});

it('should return the active powpeg redeem script', async () => {
try{
const activePowpegRedeemScript = await rskClient.rsk.bridge.methods.getActivePowpegRedeemScript().call();
const activeFederationAddressFromBridge = await rskClient.rsk.bridge.methods.getFederationAddress().call();
const addressFromRedeemScript = redeemScriptParser.getAddressFromRedeemScript(
'REGTEST', Buffer.from(removePrefix0x(activePowpegRedeemScript), 'hex')
rskTxHelpers = getRskTransactionHelpers();
rskTxHelper = rskTxHelpers[0];
if (process.env.RUNNING_SINGLE_TEST_FILE) {
await fulfillRequirementsToRunAsSingleTestFile(rskTxHelper, btcTxHelper);
}
bridge = getBridge(rskTxHelper.getClient(), await getLatestActiveForkName());
});

it('should return the active powpeg redeem script', async () => {
try {
const activePowpegRedeemScript = await bridge.methods.getActivePowpegRedeemScript().call();
const activeFederationAddressFromBridge = await bridge.methods.getFederationAddress().call();
const addressFromRedeemScript =
redeemScriptParser.getAddressFromRedeemScript(
'REGTEST',
Buffer.from(removePrefix0x(activePowpegRedeemScript), 'hex'),
);

expect(activePowpegRedeemScript).to.eq(GENESIS_FEDERATION_REDEEM_SCRIPT);
expect(addressFromRedeemScript).to.eq(GENESIS_FEDERATION_ADDRESS).to.eq(activeFederationAddressFromBridge);
} catch (err) {
throw new CustomError('getActivePowpegRedeemScript method validation failure', err);
}
})

expect(activePowpegRedeemScript).to.eq(GENESIS_FEDERATION_REDEEM_SCRIPT);
expect(addressFromRedeemScript)
.to.eq(GENESIS_FEDERATION_ADDRESS)
.to.eq(activeFederationAddressFromBridge);
} catch (err) {
throw new CustomError(
'getActivePowpegRedeemScript method validation failure',
err,
);
}
});
});
141 changes: 56 additions & 85 deletions tests/05_02_01-last_fork_active_powpeg_redeem_script.js
Original file line number Diff line number Diff line change
@@ -1,115 +1,86 @@
const chai = require("chai");
chai.use(require("chai-as-promised"));
const chai = require('chai');
chai.use(require('chai-as-promised'));
const expect = chai.expect;
const peglib = require('peglib');
const bitcoin = peglib.bitcoin;
const { compareFederateKeys } = require("../lib/federation-utils");
const { getRskTransactionHelpers } = require('../lib/rsk-tx-helper-provider');
const rsk = require("peglib").rsk;
const { getBtcClient } = require('../lib/btc-client-provider');
const redeemScriptParser = require("@rsksmart/powpeg-redeemscript-parser");
const CustomError = require("../lib/CustomError");
const removePrefix0x = require("../lib/utils").removePrefix0x;
const {compareFederateKeys} = require('../lib/federation-utils');
const {getRskTransactionHelpers} = require('../lib/rsk-tx-helper-provider');
const redeemScriptParser = require('@rsksmart/powpeg-redeemscript-parser');
const CustomError = require('../lib/CustomError');
const removePrefix0x = require('../lib/utils').removePrefix0x;
const {getBridge, getLatestActiveForkName} = require('../lib/precompiled-abi-forks-util');

// in order to run this as a single test file, it requires a federation change so follow the following command
// npm run run-single-test-file 04_00_02-fedchange.js,05_02_01-last_fork_active_powpeg_redeem_script.js

const {
ERP_PUBKEYS,
ERP_CSV_VALUE,
KEY_TYPE_BTC,
KEY_TYPE_RSK,
KEY_TYPE_MST,
} = require("../lib/constants");
} = require('../lib/constants');
const INITIAL_FEDERATION_SIZE = 3;
let btcClient;
let rskClientNewFed;
let rskClients;
let rskClient;
let newFederationBtcPublicKeys;
let newFederationPublicKeys;

let rskTxHelpers;
let btcTxHelper;
let rskTxHelper;
describe("Calling getActivePowpegRedeemScript method after last fork after fed change", function () {
before(() => {
rskClient = rsk.getClient(Runners.hosts.federate.host);
let bridge;

describe('Calling getActivePowpegRedeemScript method after last fork after fed change', function() {
before(async () => {
rskTxHelpers = getRskTransactionHelpers();
rskTxHelper = rskTxHelpers[0];
bridge = getBridge(rskTxHelper.getClient(), await getLatestActiveForkName());
});

it("should return the active powpeg redeem script", async () => {
it('should return the active powpeg redeem script', async () => {
try {
const activePowpegRedeemScript = await rskClient.rsk.bridge.methods
.getActivePowpegRedeemScript()
.call();
const activeFederationAddressFromBridge =
await rskClient.rsk.bridge.methods.getFederationAddress().call();
const addressFromRedeemScript =
redeemScriptParser.getAddressFromRedeemScript(
"REGTEST",
Buffer.from(removePrefix0x(activePowpegRedeemScript), "hex")
);

const NETWORK = bitcoin.networks.testnet;
btcClient = bitcoin.getClient(
Runners.hosts.bitcoin.rpcHost,
Runners.hosts.bitcoin.rpcUser,
Runners.hosts.bitcoin.rpcPassword,
NETWORK
const activePowpegRedeemScript = await bridge.methods
.getActivePowpegRedeemScript()
.call();
const activeFederationAddressFromBridge = await bridge.methods.getFederationAddress().call();
const addressFromRedeemScript = redeemScriptParser.getAddressFromRedeemScript(
'REGTEST',
Buffer.from(removePrefix0x(activePowpegRedeemScript), 'hex'),
);
rskClients = Runners.hosts.federates.map((federate) =>
rsk.getClient(federate.host)
);
rskTxHelpers = getRskTransactionHelpers();
rskTxHelper = rskTxHelpers[0];
btcTxHelper = getBtcClient();

if (process.env.RUNNING_SINGLE_TEST_FILE) {
await fulfillRequirementsToRunAsSingleTestFile(
rskTxHelper,
btcTxHelper
);
}

// Assume the last of the running federators belongs to the new federation
rskClientNewFed = rskClients[rskClients.length - 1];

rskClients = Runners.hosts.federates.map((federate) =>
rsk.getClient(federate.host)
);
newFederationPublicKeys = Runners.hosts.federates
.filter((federate, index) => index >= INITIAL_FEDERATION_SIZE)
.map((federate) => ({
[KEY_TYPE_BTC]: bitcoin.keys.publicKeyToCompressed(
federate.publicKeys[KEY_TYPE_BTC]
),
[KEY_TYPE_RSK]: bitcoin.keys.publicKeyToCompressed(
federate.publicKeys[KEY_TYPE_RSK]
),
[KEY_TYPE_MST]: bitcoin.keys.publicKeyToCompressed(
federate.publicKeys[KEY_TYPE_MST]
),
}))
.sort(compareFederateKeys);
newFederationBtcPublicKeys = newFederationPublicKeys.map(
(publicKeys) => publicKeys[KEY_TYPE_BTC]
const newFederationPublicKeys = Runners.hosts.federates
.filter((federate, index) => index >= INITIAL_FEDERATION_SIZE)
.map((federate) => ({
[KEY_TYPE_BTC]: bitcoin.keys.publicKeyToCompressed(
federate.publicKeys[KEY_TYPE_BTC],
),
[KEY_TYPE_RSK]: bitcoin.keys.publicKeyToCompressed(
federate.publicKeys[KEY_TYPE_RSK],
),
[KEY_TYPE_MST]: bitcoin.keys.publicKeyToCompressed(
federate.publicKeys[KEY_TYPE_MST],
),
}))
.sort(compareFederateKeys);
const newFederationBtcPublicKeys = newFederationPublicKeys.map(
(publicKeys) => publicKeys[KEY_TYPE_BTC],
);
const p2shErpFedRedeemScript = redeemScriptParser.getP2shErpRedeemScript(
newFederationBtcPublicKeys,
ERP_PUBKEYS,
ERP_CSV_VALUE
newFederationBtcPublicKeys,
ERP_PUBKEYS,
ERP_CSV_VALUE,
);
const expectedNewFederationAddress =
redeemScriptParser.getAddressFromRedeemScript(
"REGTEST",
p2shErpFedRedeemScript
'REGTEST',
p2shErpFedRedeemScript,
);

expect(activePowpegRedeemScript)
.to.eq("0x" + p2shErpFedRedeemScript.toString("hex")
);
.to.eq('0x' + p2shErpFedRedeemScript.toString('hex'),
);
expect(addressFromRedeemScript)
.to.eq(expectedNewFederationAddress)
.to.eq(activeFederationAddressFromBridge);
.to.eq(expectedNewFederationAddress)
.to.eq(activeFederationAddressFromBridge);
} catch (err) {
throw new CustomError(
"getActivePowpegRedeemScript method validation failure",
err
'getActivePowpegRedeemScript method validation failure',
err,
);
}
});
Expand Down

0 comments on commit 607e62f

Please sign in to comment.