Detect more lightning scripts:

- expired htlc
- anchor
- swept anchor

Fix indentation what i messed up in 7565aa7

Add explanation
This commit is contained in:
Antoni Spaanderman 2022-03-27 16:13:48 +02:00
parent 9de8f78b30
commit 56656839b3
No known key found for this signature in database
GPG Key ID: AE0B68E552E5DF8C

View File

@ -46,19 +46,36 @@ export class AddressLabelsComponent implements OnInit {
return;
}
const topElement = this.vin.witness[this.vin.witness.length - 2];
// https://github.com/lightning/bolts/blob/master/03-transactions.md#commitment-transaction-outputs
if (/^OP_IF OP_PUSHBYTES_33 \w{66} OP_ELSE OP_PUSHBYTES_(1 \w{2}|2 \w{4}) OP_CSV OP_DROP OP_PUSHBYTES_33 \w{66} OP_ENDIF OP_CHECKSIG$/.test(this.vin.inner_witnessscript_asm)) {
if (this.vin.witness[this.vin.witness.length - 2] == '01') {
this.lightning = 'Revoked Force Close';
} else {
this.lightning = 'Force Close';
}
if (topElement === '01') {
// top element is '01' to get in the revocation path
this.lightning = 'Revoked Force Close';
} else {
// top element is '', this is a delayed to_local output
this.lightning = 'Force Close';
}
// https://github.com/lightning/bolts/blob/master/03-transactions.md#offered-htlc-outputs
} else if (/^OP_DUP OP_HASH160 OP_PUSHBYTES_20 \w{40} OP_EQUAL OP_IF OP_CHECKSIG OP_ELSE OP_PUSHBYTES_33 \w{66} OP_SWAP OP_SIZE OP_PUSHBYTES_1 20 OP_EQUAL OP_NOTIF OP_DROP OP_PUSHNUM_2 OP_SWAP OP_PUSHBYTES_33 \w{66} OP_PUSHNUM_2 OP_CHECKMULTISIG OP_ELSE OP_HASH160 OP_PUSHBYTES_20 \w{40} OP_EQUALVERIFY OP_CHECKSIG OP_ENDIF (OP_PUSHNUM_1 OP_CHECKSEQUENCEVERIFY OP_DROP |)OP_ENDIF$/.test(this.vin.inner_witnessscript_asm)) {
if (this.vin.witness[this.vin.witness.length - 2].length == 66) {
this.lightning = 'Revoked HTLC';
if (topElement.length === 66) {
// top element is a public key
this.lightning = 'Revoked HTLC';
} else if (topElement) {
// top element is a preimage
this.lightning = 'HTLC';
} else {
this.lightning = 'HTLC';
// top element is '' to get in the multisig path of the script
this.lightning = 'Expired HTLC';
}
// https://github.com/lightning/bolts/blob/master/03-transactions.md#to_local_anchor-and-to_remote_anchor-output-option_anchors
} else if (/^OP_PUSHBYTES_33 \w{66} OP_CHECKSIG OP_IFDUP OP_NOTIF OP_PUSHNUM_16 OP_CSV OP_ENDIF$/.test(this.vin.inner_witnessscript_asm)) {
if (topElement) {
// top element is a signature
this.lightning = 'Anchor';
} else {
// top element is '', it has been swept after 16 blocks
this.lightning = 'Swept Anchor';
}
}
@ -77,19 +94,19 @@ export class AddressLabelsComponent implements OnInit {
return;
}
const ops = script.split(' ');
if (ops.length < 3 || ops.pop() != 'OP_CHECKMULTISIG') {
if (ops.length < 3 || ops.pop() !== 'OP_CHECKMULTISIG') {
return;
}
const opN = ops.pop();
if (!opN.startsWith('OP_PUSHNUM_')) {
return;
}
const n = parseInt(opN.match(/[0-9]+/)[0]);
const n = parseInt(opN.match(/[0-9]+/)[0], 10);
if (ops.length < n * 2 + 1) {
return;
}
// pop n public keys
for (var i = 0; i < n; i++) {
for (let i = 0; i < n; i++) {
if (!/^0((2|3)\w{64}|4\w{128})$/.test(ops.pop())) {
return;
}
@ -101,7 +118,7 @@ export class AddressLabelsComponent implements OnInit {
if (!opM.startsWith('OP_PUSHNUM_')) {
return;
}
const m = parseInt(opM.match(/[0-9]+/)[0]);
const m = parseInt(opM.match(/[0-9]+/)[0], 10);
this.multisig = true;
this.multisigM = m;