Skip to content

Commit

Permalink
Merge pull request #3867 from Emurgo/release/5.4.700
Browse files Browse the repository at this point in the history
pull for-prod fixes into develop
  • Loading branch information
vsubhuman authored Feb 24, 2025
2 parents b7f2dae + 0cab08f commit 6c18ff2
Show file tree
Hide file tree
Showing 10 changed files with 130 additions and 129 deletions.
55 changes: 14 additions & 41 deletions packages/yoroi-extension/app/api/ada/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ describe('app/api/ada/index', () => {
{
identifier: '',
networkId: 300,
amount: new BigNumber('8812367')
amount: new BigNumber('8820947')
},
{
amount: new BigNumber('45000000'),
Expand All @@ -508,7 +508,7 @@ describe('app/api/ada/index', () => {
]
);

expect(response.unsignedTx.get_fee_if_set()?.to_str()).toEqual('187633');
expect(response.unsignedTx.get_fee_if_set()?.to_str()).toEqual('179053');

function cmpOutputs(o1: any, o2: any): number {
if (o1.address > o2.address) {
Expand All @@ -530,7 +530,7 @@ describe('app/api/ada/index', () => {
collateral_return: null,
current_treasury_value: null,
donation: null,
fee: '187633',
fee: '179053',
inputs: [
{
index: 1,
Expand All @@ -552,65 +552,38 @@ describe('app/api/ada/index', () => {
{
address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn',
amount: {
coin: '1000000',
multiasset: null
},
plutus_data: null,
script_ref: null
},
{
address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn',
amount: {
coin: '1000000',
multiasset: null
},
plutus_data: null,
script_ref: null
},
{
address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn',
amount: {
coin: '1000000',
multiasset: null
coin: '1155080',
multiasset: {
'c85f714f2187021c7bab53741f659d0c5b1a6e7529d32b7794ff051c': {
'474f4c44': '45000000',
},
}
},
plutus_data: null,
script_ref: null
},
{
address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn',
amount: {
coin: '1000000',
multiasset: null
coin: '2000000',
multiasset: null,
},
plutus_data: null,
script_ref: null
},
{
address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn',
amount: {
coin: '1000000',
multiasset: null
coin: '2000000',
multiasset: null,
},
plutus_data: null,
script_ref: null
},
{
address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn',
amount: {
coin: '1155080',
multiasset: {
'c85f714f2187021c7bab53741f659d0c5b1a6e7529d32b7794ff051c': {
'474f4c44': '45000000',
},
},
},
plutus_data: null,
script_ref: null,
},
{
address: 'addr_test1qp00295qtc07m8f65trccaveaycum8zaj9xrwt4jw2qqdn7r3y3kdut55a40jff00qmg74686vz44v6k363md06qkq0qn97ahn',
amount: {
coin: '2657287',
coin: '3665867',
multiasset: null
},
plutus_data: null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,16 @@ export function transactionHexReplaceWitnessSet(txHex: string, witnessSetHex: st
});
}

export function transactionHexAddVkeyWitnessesFromWitnessSetHex(txHex: string, witnessSetHex: string): string {
export function transactionHexAddSignaturesFromWitnessSetHex(txHex: string, witnessSetHex: string): string {
return RustModule.WasmScope(Module => {
const fixedTransaction = Module.WalletV4.FixedTransaction.from_hex(txHex);
const witnessSet = Module.WalletV4.TransactionWitnessSet.from_hex(witnessSetHex);
for (const vkeyWitness of iterateLenGet(witnessSet.vkeys())) {
fixedTransaction.add_vkey_witness(vkeyWitness);
}
for (const bootstrapWitness of iterateLenGet(witnessSet.bootstraps())) {
fixedTransaction.add_bootstrap_witness(bootstrapWitness);
}
return fixedTransaction.to_hex();
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ import type { RequiredInput, TxMint } from '@emurgo/yoroi-eutxo-txs/dist/tx-buil
import type { NetworkConfig } from '@emurgo/yoroi-eutxo-txs/dist/kernel';

// <TODO:FETCH> unmagic this
const COSMODELS = 'a30098a61a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a00037c71187a0001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a00037c71187a0001011a0001614219020700011a000122c118201a00014f581a00037c71187a0001011a00014f581a00037c71187a0001011a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a032e93af1937fd0a0198af1a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a00037c71187a0001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a00037c71187a0001011a0001614219020700011a000122c118201a00014f581a00037c71187a0001011a00014f581a00037c71187a0001011a000e94721a0003414000021a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a0290f1e70a1a032e93af1937fd0a1a0298e40b1966c40a029901291a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a0001e143191c893903831906b419022518391a00014f580001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a0001e143191c893903831906b419022518391a00014f5800011a0001614219020700011a000122c118201a00014f581a0001e143191c893903831906b419022518391a00014f580001011a00014f581a0001e143191c893903831906b419022518391a00014f5800011a000e94721a0003414000021a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a0290f1e70a1a032e93af1937fd0a1a0298e40b1966c40a193e801864193e8018641a000eaf1f121a002a6e06061a0006be98011a0321aac7190eac121a00041699121a048e466e1922a4121a0327ec9a121a001e743c18241a0031410f0c1a000dbf9e011a09f2f6d31910d318241a0004578218241a096e44021967b518241a0473cee818241a13e62472011a0f23d40118481a00212c5618481a0022814619fc3b041a00032b00192076041a0013be0419702c183f00011a000f59d919aa6718fb00011a000187551902d61902cf00011a000187551902d61902cf00011a000187551902d61902cf00011a0001a5661902a800011a00017468011a00044a391949a000011a0002bfe2189f01011a00026b371922ee00011a00026e9219226d00011a0001a3e2190ce2011a00019e4919028f011a001df8bb195fc803';
const COSTMODELS = 'a30098a61a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a00037c71187a0001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a00037c71187a0001011a0001614219020700011a000122c118201a00014f581a00037c71187a0001011a00014f581a00037c71187a0001011a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a032e93af1937fd0a0198af1a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a00037c71187a0001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a00037c71187a0001011a0001614219020700011a000122c118201a00014f581a00037c71187a0001011a00014f581a00037c71187a0001011a000e94721a0003414000021a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a0290f1e70a1a032e93af1937fd0a1a0298e40b1966c40a029901291a000189b41901a401011903e818ad00011903e819ea350401192baf18201a000312591920a404193e801864193e801864193e801864193e801864193e801864193e80186418641864193e8018641a000170a718201a00020782182019f016041a0001194a18b2000119568718201a0001643519030104021a00014f581a0001e143191c893903831906b419022518391a00014f580001011903e819a7a90402195fe419733a1826011a000db464196a8f0119ca3f19022e011999101903e819ecb2011a00022a4718201a000144ce1820193bc318201a0001291101193371041956540a197147184a01197147184a0119a9151902280119aecd19021d0119843c18201a00010a9618201a00011aaa1820191c4b1820191cdf1820192d1a18201a00014f581a0001e143191c893903831906b419022518391a00014f5800011a0001614219020700011a000122c118201a00014f581a0001e143191c893903831906b419022518391a00014f580001011a00014f581a0001e143191c893903831906b419022518391a00014f5800011a000e94721a0003414000021a0004213c19583c041a00163cad19fc3604194ff30104001a00022aa818201a000189b41901a401011a00013eff182019e86a1820194eae182019600c1820195108182019654d182019602f18201a0290f1e70a1a032e93af1937fd0a1a0298e40b1966c40a193e801864193e8018641a000eaf1f121a002a6e06061a0006be98011a0321aac7190eac121a00041699121a048e466e1922a4121a0327ec9a121a001e743c18241a0031410f0c1a000dbf9e011a09f2f6d31910d318241a0004578218241a096e44021967b518241a0473cee818241a13e62472011a0f23d40118481a00212c5618481a0022814619fc3b041a00032b00192076041a0013be0419702c183f00011a000f59d919aa6718fb00011a000187551902d61902cf00011a000187551902d61902cf00011a000187551902d61902cf00011a0001a5661902a800011a00017468011a00044a391949a000011a0002bfe2189f01011a00026b371922ee00011a00026e9219226d00011a0001a3e2190ce2011a00019e4919028f011a001df8bb195fc803';

/**
* based off what the cardano-wallet team found worked empirically
Expand Down Expand Up @@ -593,7 +593,7 @@ export async function newAdaUnsignedTxFromUtxo(
)
);

const txBuilder = await TxBuilder.new(defaultNetworkConfig, utxoSet);
const txBuilder = await TxBuilder.new(defaultNetworkConfig);

// When both hash and datum are present - datum is added as extra witness
const extraWitnessDatumsPresent =
Expand Down Expand Up @@ -670,7 +670,7 @@ export async function newAdaUnsignedTxFromUtxo(

// must set TTL before specifying change address, otherwise the TX builder
// miscalculate the tx fee by several bytes fewer
txBuilder.setTtl(absSlotNumber.plus(defaultTtlOffset).toNumber());
await txBuilder.setTtl(absSlotNumber.plus(defaultTtlOffset).toNumber());

let changeAddress;
if (changeAdaAddr != null) {
Expand All @@ -690,7 +690,22 @@ export async function newAdaUnsignedTxFromUtxo(
}

if (extraWitnessDatumsPresent) {
await txBuilder.calcScriptDataHash(COSMODELS);
await txBuilder.calcScriptDataHash(COSTMODELS);
}

try {
await txBuilder.selectInputsFrom(utxoSet);
} catch (error) {
if (error instanceof LibNotEnoughMoneyToSendError) {
throw new NotEnoughMoneyToSendError();
}
if (error instanceof LibOverflowError) {
throw new AssetOverflowError();
}
if (String(error).includes('less than the minimum UTXO value')) {
throw new CannotSendBelowMinimumValueError();
}
throw error;
}

await txBuilder.addChangeAndFee(changeAddress);
Expand Down Expand Up @@ -900,7 +915,7 @@ async function newAdaUnsignedTxFromUtxoForConnector(
)
);

const txBuilder = await TxBuilder.new(defaultNetworkConfig, utxoSet);
const txBuilder = await TxBuilder.new(defaultNetworkConfig);

await txBuilder.addRequiredInputs(
// $FlowIgnore
Expand Down Expand Up @@ -995,10 +1010,6 @@ async function newAdaUnsignedTxFromUtxoForConnector(
throw error;
}

await txBuilder.prepareForPlutus(
protocolParams.networkId > 0 ? 'vasil' : 'default'
);

let changeAddress;
if (changeAdaAddr != null) {
// $FlowIgnore[incompatible-type]
Expand All @@ -1017,6 +1028,21 @@ async function newAdaUnsignedTxFromUtxoForConnector(
);
}

try {
await txBuilder.selectInputsFrom(utxoSet);
} catch (error) {
if (error instanceof LibNotEnoughMoneyToSendError) {
throw new NotEnoughMoneyToSendError();
}
if (error instanceof LibOverflowError) {
throw new AssetOverflowError();
}
if (String(error).includes('less than the minimum UTXO value')) {
throw new CannotSendBelowMinimumValueError();
}
throw error;
}

await txBuilder.addChangeAndFee(changeAddress);

const unsignedTx = await txBuilder.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -405,23 +405,23 @@ describe('Create unsigned TX from UTXO', () => {

await testTxConstruction([0.2, 0.2, 0.2, 0.2, 0.2], {
inputs: [utxos[3]],
fee: '1342',
fee: '1138',
sumInputs: '30000000',
sumOutputs: '29998658',
sumOutputs: '29998862',
});

await testTxConstruction([0.7, 0.7, 0.7, 0.7, 0.7], {
inputs: [utxos[2]],
fee: '1414',
fee: '1210',
sumInputs: '10000001',
sumOutputs: '9998587',
sumOutputs: '9998791',
});

await testTxConstruction([0.7, 0.2, 0.7, 0.2, 0.7], {
inputs: [utxos[2]],
fee: '1414',
fee: '1210',
sumInputs: '10000001',
sumOutputs: '9998587',
sumOutputs: '9998791',
});
});

Expand Down Expand Up @@ -463,16 +463,25 @@ describe('Create unsigned TX from UTXO', () => {
);

// always take utxos[4], take either utxos[2] or utxos[3] randomly
let variant;
try {
expect(new Set([utxos[4], utxos[2]])).toEqual(new Set(unsignedTxResponse.senderUtxos));
expect(unsignedTxResponse.txBuilder.get_explicit_input().coin().to_str()).toEqual('12000002');
expect(unsignedTxResponse.txBuilder.get_explicit_output().coin().to_str()).toEqual('11998036');
expect(unsignedTxResponse.txBuilder.min_fee().to_str()).toEqual('1966');
expect(new Set(unsignedTxResponse.senderUtxos)).toEqual(new Set([utxos[2], utxos[4]]));
variant = 1;
} catch {
expect(new Set([utxos[4], utxos[3]])).toEqual(new Set(unsignedTxResponse.senderUtxos));
expect(new Set(unsignedTxResponse.senderUtxos)).toEqual(new Set([utxos[3], utxos[4]]));
variant = 2;
}

if (variant === 1) {
expect(unsignedTxResponse.txBuilder.get_explicit_input().coin().to_str()).toEqual('12000002');
expect(unsignedTxResponse.txBuilder.get_explicit_output().coin().to_str()).toEqual('11998240');
expect(unsignedTxResponse.txBuilder.min_fee().to_str()).toEqual('1762');
} else if (variant === 2) {
expect(unsignedTxResponse.txBuilder.get_explicit_input().coin().to_str()).toEqual('32000001');
expect(unsignedTxResponse.txBuilder.get_explicit_output().coin().to_str()).toEqual('31998319');
expect(unsignedTxResponse.txBuilder.min_fee().to_str()).toEqual('1682');
expect(unsignedTxResponse.txBuilder.get_explicit_output().coin().to_str()).toEqual('31998523');
expect(unsignedTxResponse.txBuilder.min_fee().to_str()).toEqual('1478');
} else {
throw new Error('Invalid test variant: ' + variant);
}

function assertMultiAsset(masset: any, policy: string, name: string, amount: string): void {
Expand All @@ -494,8 +503,9 @@ describe('Create unsigned TX from UTXO', () => {
);

const tx = unsignedTxResponse.txBuilder.build();
expect(tx.outputs().len()).toEqual(4);
assertMultiAsset(
tx.outputs().get(4).amount().multiasset(),
tx.outputs().get(2).amount().multiasset(),
assetSplit.policyId,
assetSplit.name,
'234',
Expand Down Expand Up @@ -1048,12 +1058,12 @@ describe('Create signed transactions', () => {
const txBody = unsignedTxResponse.txBuilder.build();
expect(txBody.withdrawals()?.len()).toEqual(1);
const fee = txBody.fee().to_str();
expect(fee).toEqual('1972');
expect(txBody.outputs().len()).toEqual(6);
expect(txBody.outputs().get(5).amount().coin().to_str()).toEqual(
expect(fee).toEqual('1712');
expect(txBody.outputs().len()).toEqual(4);
expect(txBody.outputs().get(3).amount().coin().to_str()).toEqual(
new BigNumber(addressedUtxos[3].amount)
.minus(fee)
.minus(5_000_000) // collateral
.minus(6_000_000) // collateral
.plus(withdrawAmount)
.plus(protocolParams.keyDeposit)
.toString()
Expand All @@ -1066,8 +1076,8 @@ describe('Create signed transactions', () => {
].sort();

expect(witArray).toEqual([
'82582001c01f8b958699ae769a246e9785db5a70e023977ea4b856dfacf23c23346caf5840b84f78dabde17e36fbf2fdf683c6aae459288325afb1cd6873e971c408d991c9e8dfcd742c62773276edfb32f40100e50f6949d8f13e34f10bc58354fad3fe0c',
'82582038c14a0756e1743081a8ebfdb9169b11283a7bf6c38045c4c4a5e62a7689639d5840eba05e14f29629cd90ea8cf0553462714227001c4e0470f278ea84afe3ecedcae4cd5d3fdc73b058991ed79a36829c4889827f2ba43ae6ace6019b8064e8bd0c',
'82582001c01f8b958699ae769a246e9785db5a70e023977ea4b856dfacf23c23346caf5840ee22be758cae48eb64c07c201791ecc5b21a3a6c8d3dc8f85073bf32552f605e7c866ce4a23fc0e95ffe8d51912e9d7ed02e3f197174ac556f695b18a5abee04',
'82582038c14a0756e1743081a8ebfdb9169b11283a7bf6c38045c4c4a5e62a7689639d5840b06f4d4e7127d21368dfac2210f2e7bf7fa059f9c52481d0cc4f96552177c1d47ace7017851bb055abd0a7a74c4940f0e8d8cc2d7d461bec30a3663716b9a20a',
]);
});
});
Expand Down
Loading

0 comments on commit 6c18ff2

Please sign in to comment.