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 = `
- Simplicity tapscript: ${hex} ${node.value.script.hex.length > 300 ? '...' : ''} + Simplicity script: ${hex} ${node.value.script.hex.length > 300 ? '...' : ''}
`; } diff --git a/frontend/src/app/components/transactions-list/transactions-list.component.html b/frontend/src/app/components/transactions-list/transactions-list.component.html index 98b4465ea..70c559c33 100644 --- a/frontend/src/app/components/transactions-list/transactions-list.component.html +++ b/frontend/src/app/components/transactions-list/transactions-list.component.html @@ -234,7 +234,7 @@ @if (isLiquid && vin.inner_simplicityscript) { - P2TR Simplicity tapscript + P2TR Simplicity script
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])); } } }