Skip to content

Commit

Permalink
add reject tests for datum and ref. script
Browse files Browse the repository at this point in the history
  • Loading branch information
janmazak committed Aug 12, 2022
1 parent cf68494 commit d169d45
Show file tree
Hide file tree
Showing 7 changed files with 208 additions and 13 deletions.
2 changes: 1 addition & 1 deletion src/errors/invalidDataReason.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export enum InvalidDataReason {
OUTPUT_INVALID_INLINE_DATUM = "invalid inline datum",
OUTPUT_INVALID_SCRIPT_HEX = "invalid script hex",
OUTPUT_INCONSISTENT_DATUM = "datum is not consistent with output type",
OUTPUT_INCONSISTENT_SCRIPT = "reference script is not consistent with output type",
OUTPUT_INCONSISTENT_REF_SCRIPT = "reference script is not consistent with output type",

MULTIASSET_INVALID_POLICY_NAME = "invalid policy id in a multiasset token bundle",
MULTIASSET_INVALID_TOKEN_BUNDLE_NOT_ARRAY = "invalid multiasset token bundle - asset groups not an array",
Expand Down
2 changes: 1 addition & 1 deletion src/parsing/transaction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ function parseTxOutput(
? parseHexString(output.scriptHex, InvalidDataReason.OUTPUT_INVALID_SCRIPT_HEX)
: null
if (scriptHex != null) {
validate(output.format === TxOutputFormat.MAP_BABBAGE, InvalidDataReason.OUTPUT_INCONSISTENT_SCRIPT)
validate(output.format === TxOutputFormat.MAP_BABBAGE, InvalidDataReason.OUTPUT_INCONSISTENT_REF_SCRIPT)
}

return {
Expand Down
6 changes: 3 additions & 3 deletions test/integration/__fixtures__/signTxPlutus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ export const testsBabbage: SignTxTestcase[] = [
...mainnetFeeTtl,
network: Networks.Testnet,
inputs: [inputs.utxoShelley],
outputs: [outputs.datumHashScriptRefExternalMap],
outputs: [outputs.datumHashRefScriptExternalMap],
},
signingMode: TransactionSigningMode.ORDINARY_TRANSACTION,
additionalWitnessPaths: [],
Expand All @@ -382,7 +382,7 @@ export const testsBabbage: SignTxTestcase[] = [
...mainnetFeeTtl,
network: Networks.Testnet,
inputs: [inputs.utxoShelley],
outputs: [outputs.datumHashScriptRef240ExternalMap],
outputs: [outputs.datumHashRefScript240ExternalMap],
},
signingMode: TransactionSigningMode.ORDINARY_TRANSACTION,
additionalWitnessPaths: [],
Expand All @@ -404,7 +404,7 @@ export const testsBabbage: SignTxTestcase[] = [
...mainnetFeeTtl,
network: Networks.Testnet,
inputs: [inputs.utxoShelley],
outputs: [outputs.datumHashScriptRef304ExternalMap],
outputs: [outputs.datumHashRefScript304ExternalMap],
},
signingMode: TransactionSigningMode.ORDINARY_TRANSACTION,
additionalWitnessPaths: [],
Expand Down
69 changes: 69 additions & 0 deletions test/integration/__fixtures__/signTxPoolRegistrationRejects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { str_to_path } from "../../../src/utils/address"
import { DontRunOnLedger } from '../../test_utils'
import { certificates, defaultPoolRegistration, inputs, outputs, poolOwnerVariationSet, relayVariationSet } from './signTxPoolRegistration'
import type { TestcaseRejectShelley } from "./signTxRejects"
import { outputs as outputs2 } from "./txElements"

const txBase: Transaction = {
network: Networks.Mainnet,
Expand Down Expand Up @@ -368,3 +369,71 @@ export const stakePoolRegistrationOwnerRejectTestcases: TestcaseRejectShelley[]
},
]

export const outputRejectTestCases: TestcaseRejectShelley[] = [
{
testname: "Pool operator - datum hash",
tx: {
...txBase,
outputs: [outputs2.datumHashExternalMap],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OPERATOR,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OPERATOR__DATUM_NOT_ALLOWED,
},
{
testname: "Pool operator - datum inline",
tx: {
...txBase,
outputs: [outputs2.inlineDatum480Map],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OPERATOR,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OPERATOR__DATUM_NOT_ALLOWED,
},
{
testname: "Pool operator - reference script",
tx: {
...txBase,
outputs: [outputs2.refScriptExternalMap],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OPERATOR,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OPERATOR__REFERENCE_SCRIPT_NOT_ALLOWED,
},
{
testname: "Pool owner - datum hash",
tx: {
...txBase,
outputs: [outputs2.datumHashExternalMap],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__DATUM_NOT_ALLOWED,
},
{
testname: "Pool owner - datum inline",
tx: {
...txBase,
outputs: [outputs2.inlineDatum480Map],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__DATUM_NOT_ALLOWED,
},
{
testname: "Pool owner - reference script",
tx: {
...txBase,
outputs: [outputs2.refScriptExternalMap],
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__REFERENCE_SCRIPT_NOT_ALLOWED,
},
]
119 changes: 118 additions & 1 deletion test/integration/__fixtures__/signTxRejects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@ export const transactionInitRejectTestcases: TestcaseRejectShelley[] = [
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__MINT_NOT_ALLOWED,
},
// collateral inputs
{
testname: "Ordinary tx - collateral inputs included",
tx: {
Expand Down Expand Up @@ -362,6 +363,7 @@ export const transactionInitRejectTestcases: TestcaseRejectShelley[] = [
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__COLLATERAL_INPUTS_NOT_ALLOWED,
},
// required signers
{
testname: "Pool registration (operator) - required signers included",
tx: {
Expand Down Expand Up @@ -407,7 +409,122 @@ export const transactionInitRejectTestcases: TestcaseRejectShelley[] = [
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__REQUIRED_SIGNERS_NOT_ALLOWED,
},

// collateral return output included
{
testname: "Ordinary tx - collateral output included",
tx: {
...shelleyBase,
collateralOutput: outputs.externalShelleyBaseKeyhashKeyhash,
},
signingMode: TransactionSigningMode.ORDINARY_TRANSACTION,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_ORDINARY__COLLATERAL_OUTPUT_NOT_ALLOWED,
},
{
testname: "Multisig tx - collateral output included",
tx: {
...shelleyBase,
collateralOutput: outputs.externalShelleyBaseKeyhashKeyhash,
},
signingMode: TransactionSigningMode.MULTISIG_TRANSACTION,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_MULTISIG__COLLATERAL_OUTPUT_NOT_ALLOWED,
},
{
testname: "Pool registration (operator) - collateral output included",
tx: {
...shelleyBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: poolRegParamOperator,
},
],
collateralOutput: outputs.externalShelleyBaseKeyhashKeyhash,
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OPERATOR,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OPERATOR__COLLATERAL_OUTPUT_NOT_ALLOWED,
},
{
testname: "Pool registration (owner) - collateral output included",
tx: {
...shelleyBase,
inputs: [inputs.utxoMultisig],
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: poolRegParamOwner,
},
],
collateralOutput: outputs.externalShelleyBaseKeyhashKeyhash,
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__COLLATERAL_OUTPUT_NOT_ALLOWED,
},
// total collateral included
{
testname: "Ordinary tx - total collateral included",
tx: {
...shelleyBase,
totalCollateral: 8,
},
signingMode: TransactionSigningMode.ORDINARY_TRANSACTION,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_ORDINARY__TOTAL_COLLATERAL_NOT_ALLOWED,
},
{
testname: "Multisig tx - total collateral included",
tx: {
...shelleyBase,
totalCollateral: 8,
},
signingMode: TransactionSigningMode.MULTISIG_TRANSACTION,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_MULTISIG__TOTAL_COLLATERAL_NOT_ALLOWED,
},
{
testname: "Pool registration (operator) - total collateral included",
tx: {
...shelleyBase,
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: poolRegParamOperator,
},
],
totalCollateral: 8,
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OPERATOR,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OPERATOR__TOTAL_COLLATERAL_NOT_ALLOWED,
},
{
testname: "Pool registration (owner) - total collateral included",
tx: {
...shelleyBase,
inputs: [inputs.utxoMultisig],
certificates: [
{
type: CertificateType.STAKE_POOL_REGISTRATION,
params: poolRegParamOwner,
},
],
totalCollateral: 8,
},
signingMode: TransactionSigningMode.POOL_REGISTRATION_AS_OWNER,
errCls: DeviceStatusError,
errMsg: DeviceStatusMessages[DeviceStatusCodes.ERR_REJECTED_BY_POLICY],
rejectReason: InvalidDataReason.SIGN_MODE_POOL_OWNER__TOTAL_COLLATERAL_NOT_ALLOWED,
},
// reference inputs included
{
testname: "Ordinary tx - reference inputs included",
Expand Down
19 changes: 13 additions & 6 deletions test/integration/__fixtures__/txElements.ts
Original file line number Diff line number Diff line change
Expand Up @@ -359,9 +359,10 @@ export const outputs: Record<
| 'internalBaseWithStakingPathMap'
| 'internalBaseWithTokensMap'
| 'datumHashExternalMap'
| 'datumHashScriptRefExternalMap'
| 'datumHashScriptRef240ExternalMap'
| 'datumHashScriptRef304ExternalMap'
| 'refScriptExternalMap'
| 'datumHashRefScriptExternalMap'
| 'datumHashRefScript240ExternalMap'
| 'datumHashRefScript304ExternalMap'
| 'datumHashWithTokensMap'
| 'inlineDatumWithTokensMap'
| 'inlineDatum480Map'
Expand Down Expand Up @@ -882,7 +883,13 @@ export const outputs: Record<
datumHashHex:"ffd4d009f554ba4fd8ed1f1d703244819861a9d34fd4753bcf3ff32f043ce188",
},
},
datumHashScriptRefExternalMap: {
refScriptExternalMap: {
format: TxOutputFormat.MAP_BABBAGE,
destination: destinations.externalShelleyBaseScripthashKeyhash,
amount: 7120787,
scriptHex: "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
},
datumHashRefScriptExternalMap: {
format: TxOutputFormat.MAP_BABBAGE,
destination: destinations.externalShelleyBaseScripthashKeyhash,
amount: 7120787,
Expand All @@ -892,7 +899,7 @@ export const outputs: Record<
},
scriptHex: "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
},
datumHashScriptRef240ExternalMap: {
datumHashRefScript240ExternalMap: {
format: TxOutputFormat.MAP_BABBAGE,
destination: destinations.externalShelleyBaseScripthashKeyhash,
amount: 7120787,
Expand All @@ -902,7 +909,7 @@ export const outputs: Record<
},
scriptHex: "4784392787cc567ac21d7b5346a4a89ae112b7ff7610e402284042aa4e6efca7956a53c3f5cb3ec6745f5e21150f2a77bd71a2adc3f8b9539e9bab41934b477f60a8b302584d1a619ed9b178b5ce6fcad31adc0d6fc17023ede474c09f29fdbfb290a5b30b5240fae5de71168036201772c0d272ae90220181f9bf8c3198e79fc2ae32b076abf4d0e10d3166923ce56994b25c00909e3faab8ef1358c136cd3b197488efc883a7c6cfa3ac63ca9cebc62121c6e22f594420c2abd54e78282adec20ee7dba0e6de65554adb8ee8314f23f86cf7cf0906d4b6c643966baf6c54240c19f4131374e298f38a626a4ad63e61",
},
datumHashScriptRef304ExternalMap: {
datumHashRefScript304ExternalMap: {
format: TxOutputFormat.MAP_BABBAGE,
destination: destinations.externalShelleyBaseScripthashKeyhash,
amount: 7120787,
Expand Down
4 changes: 3 additions & 1 deletion test/integration/signTxPoolRegistration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
invalidCertificates,
invalidPoolMetadataTestcases,
invalidRelayTestcases,
outputRejectTestCases,
poolRegistrationOwnerRejectTestcases,
stakePoolRegistrationOwnerRejectTestcases,
stakePoolRegistrationPoolIdRejectTestcases,
Expand All @@ -20,8 +21,9 @@ describeSignTxPositiveTest("signTxPoolRegistrationOK_Owner", poolRegistrationOwn
describeSignTxPositiveTest("signTxPoolRegistrationOK_Operator", poolRegistrationOperatorTestcases)

describeSignTxRejects("signTxPoolRegistrationRejects_Owner_General", poolRegistrationOwnerRejectTestcases)
describeSignTxRejects("signTxPoolRegistrationRejects_Outputs", outputRejectTestCases)
describeSignTxRejects("signTxPoolRegistrationRejects_Owner_Certificates", invalidCertificates)
describeSignTxRejects("signTxPoolRegistrationRejects_Owner_Metadata", invalidPoolMetadataTestcases)
describeSignTxRejects("signTxPoolRegistrationRejects_Owner_Relay", invalidRelayTestcases)
describeSignTxRejects("signTxPoolRegistrationRejects_Owner_PoolId", stakePoolRegistrationPoolIdRejectTestcases)
describeSignTxRejects("signTxPoolRegistrationRejects_PoolId", stakePoolRegistrationPoolIdRejectTestcases)
describeSignTxRejects("signTxPoolRegistrationRejects_Owner_Security", stakePoolRegistrationOwnerRejectTestcases)

0 comments on commit d169d45

Please sign in to comment.