j"19HxigV4QyBv3tHpQVcUEQyq1pzZVdoAutMJ---
title: BCHå级æ»å»åæ
date: 2019-05-16 1:46:14
author: æ¢æ¢å®å
¨ åä¸é¸£
---
## BCHå级æ»å»åæ
BCHç5æ15æ¥å级éå°æ»å»ï¼å¯¼è´èç¹æ¥åºtoo many sigopsé误ã
ç»åæï¼æ»å»è½½è·ä¸ºä¸ä¸ªç²¾ç¡®æé çP2SH Transactionï¼å©ç¨äºBCHå»å¹´11æå级å¼å
¥çOP_CHECKDATASIGæä½ç ã
æ»å»å¯¼è´äºç¿å·¥èç¹æ æ³æå
ï¼BCHæ¹é¢éè¿ç±»ä¼¼äºç©ºåæ»å»çæ¹å¼ï¼ç´§æ¥æåºå个空å以触åæ»å¨æ£æ¥ç¹ä¿è¯å级ãæ»å»åç约1å°æ¶åï¼BCHç¿æ± ä¸çº¿ç´§æ¥ä¿®å¤åç代ç æå继ç»åºåã
ä¸è¿åæ¶ä¹æ人è§å¯å°ï¼å¨ 582698 åºåé«åº¦ï¼æç¿å·¥æåºäºåå¸ç»å°¾ä¸º 6bf418af çåºåï¼å¤§å°139369åèãä½éå该åºå被 10 åéåBTC.top æåºçåå¸ç»å°¾ä¸º 449e2bb4 åºåæéç»ãæ许æ¯ä¸æ¬¡è¯¯ä¼¤ï¼ä¸è¿å¯è§BCH对äºå级é²å®ä¹ä¸¥å¯ã
### æ»å»åçåæ
#### æ»å»è½½è·
ææå°çæ»å»è½½è·TXID为`4c83ab55623633c86ec711b3d68ccdea506b228178ff1533f287ab744b006c44`
å
¶å
容è§é件ã
该æ»å»è½½è·ç±1334个Inputææï¼æ¯ä¸ä¸ªInputåæ¯P2SHæ ¼å¼ã
å
¶å
容为
> OP_FALSE OP_IF OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_CHECKDATASIG OP_14 OP_CHECKDATASIG OP_ENDIF OP_TRUE
å¯è§å
¶ä¸å
å«15个OP_CHECKDATASIG
该æ»å»è½½è·å©ç¨äºä¸ä¸ªCOREæ¾ç»å¸®ABCä¿®å¤ï¼ä½æªå®å
¨ä¿®å¤çæ¼æ´ï¼å¶é äºç»ååéªè¯ä¹é´çå·®å¼ï¼ä»è导è´ç¿å·¥ç»åºçåºåä¸è¢«èç¹æ¥åã
#### æ¼æ´èæ¯
OP_CHECKDATASIGæ¯ä¸ç§æ¤åæ²çº¿ç¾åæ ¡éªæ令ï¼SigOPï¼ï¼è¿ç±»æ令ç±äºéè¦è¿è¡æ¤åæ²çº¿è¿ç®ï¼æ§è¡å¼éè¿é«äºå
¶ä»æ令ãå æ¤å¨èç¹ä»£ç ä¸ï¼å¯¹äºè¿ç±»æ令çæ°éååºäºéå¶ï¼ä»¥é¿å
æç»æå¡æ»å»ã
[ç¸å
³ä»£ç ä½ç½®](https://github.com/Bitcoin-ABC/bitcoin-abc/blob/f27da0752c0a3b7382df54a65ca3cf1c3629aad4/src/consensus/consensus.h#L27)ï¼/src/consensus/consensus.h#L27
~~~c++
static const uint64_t MAX_TX_SIGOPS_COUNT = 20000;
~~~
å³ï¼å个Transactionä¸SigOPçæ°éä¸è½è¶
è¿20000ã
#### æ¼æ´åç
ç»å¿çè¯ï¼ä½ å·²ç»åç°äºï¼æ»å»è½½è·çSigOPæ°é为 1334 * 15 = 20010ï¼è¿ä¸ªæ»å»è½½è·TXä¼è¢«èç¹æç»ï¼æ¥éå³æ¯`too many sigops`ï¼è¿æ¯å¯¼è´èç¹æç»å
å«è¯¥TXçåºåçåå ã
[ç¸å
³ä»£ç ä½ç½®](https://github.com/Bitcoin-ABC/bitcoin-abc/blob/f27da0752c0a3b7382df54a65ca3cf1c3629aad4/src/validation.cpp#L1936)ï¼/src/validation.cpp#L1936
~~~c++
if (nSigOpsCount > nMaxSigOpsCount) {
return state.DoS(100, error("ConnectBlock(): too many sigops"),
REJECT_INVALID, "bad-blk-sigops");
}
~~~
ç¶èå¨ç»åæ¶ä¸ºä»ä¹æ²¡ææç»è¿ä¸ªTXå¢ï¼æ们å¯ä»¥å¨Bitcoin-ABCçè¡¥ä¸ä¸åç°ç«¯åªã
è¡¥ä¸ä½ç½®ï¼<https://reviews.bitcoinabc.org/D3053>
[ç¸å
³ä»£ç ä½ç½®](https://github.com/Bitcoin-ABC/bitcoin-abc/blob/f27da0752c0a3b7382df54a65ca3cf1c3629aad4/src/validation.cpp#L592)ï¼/src/validation.cpp#L592
~~~c++
// å代ç
int64_t nSigOpsCount = GetTransactionSigOpCount(tx, view, STANDARD_SCRIPT_VERIFY_FLAGS);
// è¡¥ä¸ä»£ç
int64_t nSigOpsCount = GetTransactionSigOpCount(tx, view, STANDARD_CHECKDATASIG_VERIFY_FLAGS);
~~~
æå¨çå½æ°ä¸ºï¼AcceptToMemoryPoolWorker
å¯è§å代ç ç»åè¿ç¨ä¸å¨è®¡ç®Transactionä¸çSigOPæ°éæ¶ï¼é误å°ä½¿ç¨äº`STANDARD_SCRIPT_VERIFY_FLAGS`ï¼èé`STANDARD_CHECKDATASIG_VERIFY_FLAGS`ã
è¿ä¸¤ä¸ªæ å¿æä»ä¹åºå«å¢ï¼
å¨policyä¸æ们å¯ä»¥æ¾å°ä»ä»¬ã
[ç¸å
³ä»£ç ä½ç½®](https://github.com/Bitcoin-ABC/bitcoin-abc/blob/f27da0752c0a3b7382df54a65ca3cf1c3629aad4/src/policy/policy.h#L108)ï¼/src/policy/policy.h#L108
~~~c++
static const uint32_t STANDARD_CHECKDATASIG_VERIFY_FLAGS =
STANDARD_SCRIPT_VERIFY_FLAGS | SCRIPT_ENABLE_CHECKDATASIG;
~~~
æ以æ们å¯ä»¥è§å°ï¼å½ä»
使ç¨äº`STANDARD_SCRIPT_VERIFY_FLAGS`æ¶ï¼è®¡ç®èæ¬ä¸SigOPæ°éæ¶ï¼æ¯ä¸å
å«OP_CHECKDATASIGçã
æ以è¿ä¸ªå
å«20010个SigOPçæ»å»è½½è·ï¼å¨ç»åæ¶ï¼ç»è®¡åºæ¥çSigOPæ°é为ï¼é¶ã
å æ¤ï¼æ»å»è½½è·ä¼å¨ç¿å·¥ç»åçæ¶å被å
å«è¿åºåä¸ï¼ç¶èï¼ç±äºå
¶ä»ä»£ç æ£ç¡®å°ç»è®¡äºSigOPï¼èç¹ä¼æç»è¯¥åºåï¼è¿å¯¼è´äºBCHæ æ³åºåã
### æ»ç»
æ»å»è
å©ç¨äºBCHå¼å
¥OP_CHECKDATASIGæ¶äº§ççï¼åæªå®å
¨ä¿®å¤çæ¼æ´ï¼å·§å¦å°æé äºæ»å»è½½è·ãæ»å»è
åºè¯¥é«åº¦äºè§£å®¢æ·ç«¯ä»£ç ï¼å¹¶çæOP_CHECKDATASIGæ¼æ´ã
UTF-8BCHå级æ»å»åæ.md| Çã$&zرÌ?èÚlØQ:ó-Æò[@â´9·ðbitpaste prerender
https://whatsonchain.com/tx/7bb1f97b1e98cc9a6abf971a648cb648575156f4ca7105900574b05b41fa31e3