Skip to content

Commit dcaa045

Browse files
author
Alejandro Busse
authored
feat(sdk-coin-ada): implement util method for ADA tx body
2 parents 961d7eb + bc67850 commit dcaa045

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

modules/sdk-coin-ada/src/lib/utils.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
NetworkInfo,
77
StakeCredential,
88
RewardAddress,
9+
Transaction as CardanoTransaction,
910
} from '@emurgo/cardano-serialization-lib-nodejs';
1011
import { KeyPair } from './keyPair';
1112
import { bech32 } from 'bech32';
@@ -150,6 +151,19 @@ export class Utils implements BaseUtils {
150151
isValidTransactionId(txId: string): boolean {
151152
return this.validateBlake2b(txId);
152153
}
154+
155+
/**
156+
* Get the transaction body from a serialized transaction
157+
* @param {string} serializedTx - serialized transaction in hex or base64 format
158+
* @returns {string} transaction body in hex format
159+
*/
160+
getTransactionBody(serializedTx: string): string {
161+
const HEX_REGEX = /^[0-9a-fA-F]+$/;
162+
const bufferRawTransaction = HEX_REGEX.test(serializedTx)
163+
? Buffer.from(serializedTx, 'hex')
164+
: Buffer.from(serializedTx, 'base64');
165+
return Buffer.from(CardanoTransaction.from_bytes(bufferRawTransaction).body().to_bytes()).toString('hex');
166+
}
153167
}
154168

155169
const utils = new Utils();

modules/sdk-coin-ada/test/resources/index.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ export const rawTx = {
115115
'84a40081825820a71708d13fd0f143dd492540c0ec5fd85011860c2c8823c1facd70afd4d6e15a0101828258390027360563c4479c6aa054cb2bd3ca9e394731ab59f8c45511ec8ba851aee1672f3f7fedc48feca58979967030dc8edc340c551b49d067638f1a004c4b4082581d60ce3edb7ad0f096553830096453e97919efc0962ed9d09a3a2c82c5e11a0ecd33be021a00028cad031a03ba7680a100818258209026aa14ba798e0182a60b3365b563c7ccecc0d05f98e530c84f657ee38adb8e58403881b490ee44f926f7c3016ac3f3622fcf18a11bc55b4cf4659a67c0bf73e1507ef2c8205488a246420106770f4c59e2de990a5df00a9f2c0b6cf87903542700f5f6',
116116
unsignedTx:
117117
'84a40081825820a71708d13fd0f143dd492540c0ec5fd85011860c2c8823c1facd70afd4d6e15a0101828258390027360563c4479c6aa054cb2bd3ca9e394731ab59f8c45511ec8ba851aee1672f3f7fedc48feca58979967030dc8edc340c551b49d067638f1a004c4b4082581d60ce3edb7ad0f096553830096453e97919efc0962ed9d09a3a2c82c5e11a0ecd33be0200031a03ba7680a10080f5f6',
118+
unsignedTxBody:
119+
'a40081825820a71708d13fd0f143dd492540c0ec5fd85011860c2c8823c1facd70afd4d6e15a0101828258390027360563c4479c6aa054cb2bd3ca9e394731ab59f8c45511ec8ba851aee1672f3f7fedc48feca58979967030dc8edc340c551b49d067638f1a004c4b4082581d60ce3edb7ad0f096553830096453e97919efc0962ed9d09a3a2c82c5e11a0ecd33be0200031a03ba7680',
118120
unsignedTx2:
119121
'84a500818258203677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba210101828258390027360563c4479c6aa054cb2bd3ca9e394731ab59f8c45511ec8ba851aee1672f3f7fedc48feca58979967030dc8edc340c551b49d067638f1a00775f1182581d60ce3edb7ad0f096553830096453e97919efc0962ed9d09a3a2c82c5e11a00c6ffe9021a00028d5d031a2faf08000480a10080f5f6',
120122
signedTx2:
@@ -132,18 +134,28 @@ export const rawTx = {
132134
},
133135
unsignedStakingActiveTx:
134136
'84a500818258203677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba2101018182583901c7b28bcea90d440b5455a6a02a27ca59b8696f067fc1967f47f933e79558e969caa9e57adcfc40b9907eb794363b590faf42fff48c38eb881a001bdb4b021a0002a935031a2faf0800048282008200581c188fde65b1f9bd69b0edcc4e5a65fa93a13773090e1e2eef7a25cfdb83028200581c188fde65b1f9bd69b0edcc4e5a65fa93a13773090e1e2eef7a25cfdb581c7a623c48348501c2380e60ac2307fcd1b67df4218f819930821a15b3a10080f5f6',
137+
unsignedStakingActiveTxBody:
138+
'a500818258203677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba2101018182583901c7b28bcea90d440b5455a6a02a27ca59b8696f067fc1967f47f933e79558e969caa9e57adcfc40b9907eb794363b590faf42fff48c38eb881a001bdb4b021a0002a935031a2faf0800048282008200581c188fde65b1f9bd69b0edcc4e5a65fa93a13773090e1e2eef7a25cfdb83028200581c188fde65b1f9bd69b0edcc4e5a65fa93a13773090e1e2eef7a25cfdb581c7a623c48348501c2380e60ac2307fcd1b67df4218f819930821a15b3',
135139
unsignedStakingActiveTxHash: 'fdcf2d64cbe3e60bc98de5d99d36b1c643dc3fa705ebfbf752bcb47f486d539a',
136140
unsignedStakingDeactiveTx:
137141
'84a500818258203677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba2101018182583901c7b28bcea90d440b5455a6a02a27ca59b8696f067fc1967f47f933e79558e969caa9e57adcfc40b9907eb794363b590faf42fff48c38eb881a0058ef4b021a00029e35031a2faf0800048182018200581c188fde65b1f9bd69b0edcc4e5a65fa93a13773090e1e2eef7a25cfdba10080f5f6',
142+
unsignedStakingDeactiveTxBody:
143+
'a500818258203677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba2101018182583901c7b28bcea90d440b5455a6a02a27ca59b8696f067fc1967f47f933e79558e969caa9e57adcfc40b9907eb794363b590faf42fff48c38eb881a0058ef4b021a00029e35031a2faf0800048182018200581c188fde65b1f9bd69b0edcc4e5a65fa93a13773090e1e2eef7a25cfdb',
138144
unsignedStakingDeactiveTxHash: 'd113e9d1fbf3ddda4157d74abc753ff232e684f7a5f9de810235596dd7372679',
139145
unsignedStakingWithdrawTx:
140146
'84a600818258203677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba2101018182583901c7b28bcea90d440b5455a6a02a27ca59b8696f067fc1967f47f933e79558e969caa9e57adcfc40b9907eb794363b590faf42fff48c38eb881a004d52e2021a00029ee5031a2faf0800048005a1581de0188fde65b1f9bd69b0edcc4e5a65fa93a13773090e1e2eef7a25cfdb1a0012e8c7a10080f5f6',
147+
unsignedStakingWithdrawTxBody:
148+
'a600818258203677e75c7ba699bfdc6cd57d42f246f86f63aefd76025006ac78313fad2bba2101018182583901c7b28bcea90d440b5455a6a02a27ca59b8696f067fc1967f47f933e79558e969caa9e57adcfc40b9907eb794363b590faf42fff48c38eb881a004d52e2021a00029ee5031a2faf0800048005a1581de0188fde65b1f9bd69b0edcc4e5a65fa93a13773090e1e2eef7a25cfdb1a0012e8c7',
141149
unsignedStakingWithdrawTxHash: 'd4aa6878f9b810bd566aba4447eaf079ca86478175ef6d92f8d0e0fa5701d50e',
142150
unsignedNewPledgeTx:
143151
'84a50081825820985b52472d4dbc184a402df5b3cd0b67bb7e9b86ec27c20a0dc917898f64410c0001818258390085e399d9be12e5d7cef3bd44119d55432ae10ba8cfa07cede12370681fc30799b291432f1aade73a4e960e2d22511f1a797d7c47a569dba11b000000023633be28021a0002d509031a01d8063b04828a03581c76044d3aa9caafbb213ae45f9a3f5ad3cc6c836f375ebbcfa5c83681582034646b66ff5bac4a40c1b8558ee8a160524151f18f1f4b06450e8414bf562e311a05f5e1001a14904840d81e820f1864581de11fc30799b291432f1aade73a4e960e2d22511f1a797d7c47a569dba181581c76044d3aa9caafbb213ae45f9a3f5ad3cc6c836f375ebbcfa5c83681818301191770782172656c61796e6f6465312e6d79616461706f6f6c6e616d65726f636b732e636f6df683028200581c1fc30799b291432f1aade73a4e960e2d22511f1a797d7c47a569dba1581c76044d3aa9caafbb213ae45f9a3f5ad3cc6c836f375ebbcfa5c83681a10080f5f6',
152+
unsignedNewPledgeTxBody:
153+
'a50081825820985b52472d4dbc184a402df5b3cd0b67bb7e9b86ec27c20a0dc917898f64410c0001818258390085e399d9be12e5d7cef3bd44119d55432ae10ba8cfa07cede12370681fc30799b291432f1aade73a4e960e2d22511f1a797d7c47a569dba11b000000023633be28021a0002d509031a01d8063b04828a03581c76044d3aa9caafbb213ae45f9a3f5ad3cc6c836f375ebbcfa5c83681582034646b66ff5bac4a40c1b8558ee8a160524151f18f1f4b06450e8414bf562e311a05f5e1001a14904840d81e820f1864581de11fc30799b291432f1aade73a4e960e2d22511f1a797d7c47a569dba181581c76044d3aa9caafbb213ae45f9a3f5ad3cc6c836f375ebbcfa5c83681818301191770782172656c61796e6f6465312e6d79616461706f6f6c6e616d65726f636b732e636f6df683028200581c1fc30799b291432f1aade73a4e960e2d22511f1a797d7c47a569dba1581c76044d3aa9caafbb213ae45f9a3f5ad3cc6c836f375ebbcfa5c83681',
144154
unsignedNewPledgeTxHash: 'dfa11367be1c45c0a2b98c350f7d6f04af08d123ec4d8ac9030676b75491f210',
145155
unsignedUpdatePledgeTx:
146156
'84a500818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a04818a03581cf61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb49735820198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d06401a1dcd65001a1443fd00d81e820102581de13a7f09d3df4cf66a7399c2b05bfa234d5a29560c311fc5db4c49071182581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277581c3a7f09d3df4cf66a7399c2b05bfa234d5a29560c311fc5db4c4907118584001904d244c0a8000150b80d01200000a3852e8a00003473700384001904d2f650b80d01200000a3852e8a00003473700384001904d244c0a80001f683011904d26d7777772e746573742e7465737482026e7777772e74657374322e74657374827568747470733a2f2f7777772e746573742e746573745820914c57c1f12bbf4a82b12d977d4f274674856a11ed4b9b95bd70f5d41c5064a6a10080f5f6',
157+
unsignedUpdatePledgeTxBody:
158+
'a500818258203b40265111d8bb3c3c608d95b3a0bf83461ace32d79336579a1939b3aad1c0b700018182583901eb0baa5e570cffbe2934db29df0b6a3d7c0430ee65d4c3a7ab2fefb91bc428e4720702ebd5dab4fb175324c192dc9bb76cc5da956e3c8dff0102182a030a04818a03581cf61c42cbf7c8c53af3f520508212ad3e72f674f957fe23ff0acb49735820198890ad6c92e80fbdab554dda02da9fb49d001bbd96181f3e07f7a6ab0d06401a1dcd65001a1443fd00d81e820102581de13a7f09d3df4cf66a7399c2b05bfa234d5a29560c311fc5db4c49071182581c122a946b9ad3d2ddf029d3a828f0468aece76895f15c9efbd69b4277581c3a7f09d3df4cf66a7399c2b05bfa234d5a29560c311fc5db4c4907118584001904d244c0a8000150b80d01200000a3852e8a00003473700384001904d2f650b80d01200000a3852e8a00003473700384001904d244c0a80001f683011904d26d7777772e746573742e7465737482026e7777772e74657374322e74657374827568747470733a2f2f7777772e746573742e746573745820914c57c1f12bbf4a82b12d977d4f274674856a11ed4b9b95bd70f5d41c5064a6',
147159
unsignedUpdatePledgeTxHash: 'e3b9a5657bf62609465a930c8359d774c73944973cfc5a104a0f0ed1e1e8db21',
148160
pledgeNodeKeyPubkey: '1b400d60aaf34eaf6dcbab9bba46001a23497886cf11066f7846933d30e5ad3f',
149161
pledgeNodeWitnessSignature:

modules/sdk-coin-ada/test/unit/utils.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,16 @@ import should from 'should';
22
import { KeyPair, Utils } from '../../src';
33
import { AddressFormat, toHex } from '@bitgo/sdk-core';
44
import { Ed25519Signature } from '@emurgo/cardano-serialization-lib-nodejs';
5-
import { address, blockHash, enterpriseAccounts, privateKeys, publicKeys, signatures, txIds } from '../resources';
5+
import {
6+
address,
7+
blockHash,
8+
enterpriseAccounts,
9+
privateKeys,
10+
publicKeys,
11+
signatures,
12+
txIds,
13+
rawTx,
14+
} from '../resources';
615

716
describe('utils', () => {
817
it('should validate addresses correctly', () => {
@@ -118,4 +127,27 @@ describe('utils', () => {
118127
should.equal(Utils.default.isValidTransactionId(txIds.hash3 + '00'), false);
119128
should.equal(Utils.default.isValidTransactionId('dalij43ta0ga2dadda02'), false);
120129
});
130+
131+
it('should get transaction body correctly', () => {
132+
const {
133+
unsignedTx,
134+
unsignedTxBody,
135+
unsignedStakingActiveTx,
136+
unsignedStakingActiveTxBody,
137+
unsignedStakingDeactiveTx,
138+
unsignedStakingDeactiveTxBody,
139+
unsignedStakingWithdrawTx,
140+
unsignedStakingWithdrawTxBody,
141+
unsignedUpdatePledgeTx,
142+
unsignedUpdatePledgeTxBody,
143+
unsignedNewPledgeTx,
144+
unsignedNewPledgeTxBody,
145+
} = rawTx;
146+
should.equal(Utils.default.getTransactionBody(unsignedTx), unsignedTxBody);
147+
should.equal(Utils.default.getTransactionBody(unsignedStakingActiveTx), unsignedStakingActiveTxBody);
148+
should.equal(Utils.default.getTransactionBody(unsignedStakingDeactiveTx), unsignedStakingDeactiveTxBody);
149+
should.equal(Utils.default.getTransactionBody(unsignedStakingWithdrawTx), unsignedStakingWithdrawTxBody);
150+
should.equal(Utils.default.getTransactionBody(unsignedUpdatePledgeTx), unsignedUpdatePledgeTxBody);
151+
should.equal(Utils.default.getTransactionBody(unsignedNewPledgeTx), unsignedNewPledgeTxBody);
152+
});
121153
});

0 commit comments

Comments
 (0)