diff --git a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts
index cbe02d0f5..8407347ee 100644
--- a/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts
+++ b/frontend/src/app/components/taproot-address-scripts/taproot-address-scripts.component.ts
@@ -320,7 +320,7 @@ export class TaprootAddressScriptsComponent implements OnChanges {
const hex = node.value.script.hex.slice(0, 300);
asmContent = `
@if (isLiquid && vin.inner_simplicityscript) {
- P2TR Simplicity tapscript |
+ P2TR Simplicity script |
1000" style="display: flex;">
diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.ts b/frontend/src/app/components/transactions-list/transactions-list.component.ts
index 9c6ac5ca7..247a056a2 100644
--- a/frontend/src/app/components/transactions-list/transactions-list.component.ts
+++ b/frontend/src/app/components/transactions-list/transactions-list.component.ts
@@ -338,14 +338,15 @@ export class TransactionsListComponent implements OnInit, OnChanges, OnDestroy {
} else { // check for simplicity script spends
for (const vin of tx.vin) {
if (vin.prevout?.scriptpubkey_type === 'v1_p2tr' && vin.inner_witnessscript_asm) {
- const hasAnnex = vin.witness?.[vin.witness.length - 1].startsWith('50');
- // script spend
- if (vin.witness.length > (hasAnnex ? 2 : 1)) {
- const controlBlock = vin.witness[vin.witness.length - (hasAnnex ? 2 : 1)];
- const script = vin.witness[vin.witness.length - (hasAnnex ? 3 : 2)];
- // simplicity tapleaf version
- if (controlBlock.startsWith('be') || controlBlock.startsWith('bf')) {
- vin.inner_simplicityscript = script;
+ const hasAnnex = vin.witness[vin.witness.length - 1].startsWith('50');
+ const isScriptSpend = vin.witness.length > (hasAnnex ? 2 : 1);
+ if (isScriptSpend) {
+ const controlBlock = hasAnnex ? vin.witness[vin.witness.length - 2] : vin.witness[vin.witness.length - 1];
+ const scriptHex = hasAnnex ? vin.witness[vin.witness.length - 3] : vin.witness[vin.witness.length - 2];
+ const tapleafVersion = parseInt(controlBlock.slice(0, 2), 16) & 0xfe;
+ // simplicity script spend
+ if (tapleafVersion === 0xbe) {
+ vin.inner_simplicityscript = scriptHex;
}
}
}
diff --git a/frontend/src/app/shared/address-utils.ts b/frontend/src/app/shared/address-utils.ts
index 6a53b8578..69db4cc4a 100644
--- a/frontend/src/app/shared/address-utils.ts
+++ b/frontend/src/app/shared/address-utils.ts
@@ -128,6 +128,7 @@ export class AddressTypeInfo {
// flags
isMultisig?: { m: number, n: number };
tapscript?: boolean;
+ simplicity?: boolean;
constructor (network: string, address: string, type?: AddressType, vin?: Vin[], vout?: Vout) {
this.network = network;
@@ -157,19 +158,20 @@ export class AddressTypeInfo {
if (this.type === 'v1_p2tr') {
for (let i = 0; i < vin.length; i++) {
const v = vin[i];
- if (v.inner_witnessscript_asm) {
- this.tapscript = true;
- const hasAnnex = v.witness[v.witness.length - 1].startsWith('50');
+ const hasAnnex = v.witness[v.witness.length - 1].startsWith('50');
+ const isScriptSpend = v.witness.length > (hasAnnex ? 2 : 1);
+ if (isScriptSpend) {
const controlBlock = hasAnnex ? v.witness[v.witness.length - 2] : v.witness[v.witness.length - 1];
const scriptHex = hasAnnex ? v.witness[v.witness.length - 3] : v.witness[v.witness.length - 2];
+ const tapleafVersion = parseInt(controlBlock.slice(0, 2), 16) & 0xfe;
- if ((this.network === 'liquid' || this.network === 'liquidtestnet')
- && (controlBlock.startsWith('be') || controlBlock.startsWith('bf'))
- ) {
+ if (tapleafVersion === 0xc0 && v.inner_witnessscript_asm) {
+ this.tapscript = true;
+ this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, vinIds?.[i]));
+ } else if (this.network === 'liquid' || this.network === 'liquidtestnet' && tapleafVersion === 0xbe) {
+ this.simplicity = true;
v.inner_simplicityscript = scriptHex;
this.processScript(new ScriptInfo('inner_simplicityscript', scriptHex, null, v.witness, controlBlock, vinIds?.[i]));
- } else {
- this.processScript(new ScriptInfo('inner_witnessscript', scriptHex, v.inner_witnessscript_asm, v.witness, controlBlock, vinIds?.[i]));
}
}
}
|