이미 공개된 크래시 말고도, CVE-2018-17144를 이용하면 0.15.X~0.16.2 버전에서 채굴자가 한 트랜잭션 안에서 같은 출력을 두 번 써 비트코인 공급량을 부풀릴 수 있었다. 개발진은 시스템들이 0.16.3이나 0.17.0rc4로 옮길 시간을 벌려고 이 부분을 공개하지 않았다. 해시레이트 과반이 패치된 것으로 보이고 악용 시도는 알려지지 않았으나, 영향받는 사용자에게는 업그레이드를 촉구했다.
CVE-2018-17144로 Bitcoin Core 0.14.0~0.16.2는 입력 하나를 두 번 쓰는 트랜잭션이 든 블록을 받으면 다운된다. 사용자에게는 즉시 0.16.3으로 업그레이드하라는 안내가 나갔다. 그런 블록은 허용된 수입 중 최소 12.5 BTC를 포기할 각오가 된 채굴자만 만들 수 있다.
비용이 많이 드는 SPV 증명 공격이 6월 초 공개됐는데, Bitcoin Core 0.16.2의 verifytxoutproof RPC는 여기에 더는 당하지 않는다. 실제 SPV 클라이언트는 여전히 노출돼 있다. 별도 수정으로 abandontransaction은 자식에서 멈추지 않고 모든 자손을 버린다.
레거시 서명 스크립트의 OP_CODESEPARATOR를 Bitcoin Core 0.16.1은 릴레이하지 않는다. 검증이 느린 블록에 대한 향후 수정을 쉽게 배포하기 위한 정책 변경이다. 채굴자용 -blockmaxsize 옵션은 -blockmaxweight로 대체되며, 블록 두 개를 연달아 만들었을 때 수익을 잃을 수 있던 버그도 고쳤다.
SegWit이 Bitcoin Core 0.16.0에서 지갑 기본값이 됐다. 새 주소는 -addresstype으로 달리 지정하지 않는 한 p2sh-segwit이고, BIP173 네이티브 bc1 주소도 생성하고 송금할 수 있다. 새 지갑은 HD 전용이라 이전 버전에서는 열리지 않으며, GUI 송금 화면은 BIP125 RBF를 기본으로 켠다.
향후 네트워크 포크에 대비한 예방 조치로, Bitcoin Core 0.15.1은 초기 동기화 중 minimum-chain-work에 못 미치는 체인을 제시하는 피어와 무효로 알려진 헤더를 보내는 아웃바운드 피어의 연결을 끊는다. 체인 끝이 30분간 멈추면 아웃바운드 연결을 하나 더 연다. 채굴자용 blockmaxsize는 폐지 예고돼 이제 가중치 한도를 암시하는 역할만 한다.
Bitcoin Core 0.15.0의 수수료 추정 범위가 25블록에서 1,008블록으로 늘었고, GUI 사용자는 미확인 트랜잭션 수수료를 Replace-By-Fee로 올릴 수 있다. 출력 단위 chainstate 데이터베이스는 초기 블록 다운로드를 30~40% 앞당긴다. 변환은 첫 실행 때 자동으로 진행되며 약 5~30분 걸린다.
Bitcoin Core의 정규 기여자들은 Segwit2x 구현체 btc1과 아무 관계가 없다. 프로젝트는 btc1이 필수 업데이트라는 주장을 부인하며, 논란 속에 네트워크 규칙에서 이탈하는 것이라고 규정했다. 며칠 뒤로 다가온 소프트포크 SegWit은 이 하드포크와 무관하고 대부분의 사용자에게 아무 조치도 요구하지 않는다. 성명은 Segwit2x에 강력한 리플레이 보호 계획이 없다고도 경고했다.
UPnP를 켠 사용자는 Bitcoin Core 0.14.2를 서둘러 설치해야 한다. 함께 배포되는 miniupnpc의 정수 부호 오류(CVE-2017-8798)로 로컬 네트워크의 공격자가 서비스 거부나 그 밖의 피해를 일으킬 수 있다. UPnP는 기본적으로 꺼져 있어 켠 적 없는 노드는 영향이 없다.
SegWit을 지원하지 않는 채굴자도 활성화 이후 getblocktemplate을 계속 쓸 수 있게 됐다. Bitcoin Core 0.14.1이 템플릿에서 SegWit 트랜잭션을 빼기 때문이다. -dbcache 기본값은 450MiB로 바뀌었고, 이 한도는 플러시 피크 때도 지켜진다. createrawtransaction과 disconnectnode의 인수 이름이 바뀌어 0.14.0의 명명 인수를 쓰던 호출은 동작하지 않는다.
Bitcoin Core 로드맵에 오른 하이브리드 전체 블록 SPV 모드를 쓰면 새 노드의 지갑은 동기화가 끝나기 전에도 송금과 수신을 할 수 있다. 지갑에서 가장 오래된 키를 기준으로 블록을 먼저 받고 전체 검증은 백그라운드에서 이어 가는 방식이다. 블룸 필터의 프라이버시 유출은 사라지지만 대역폭을 더 쓰며, 결제는 6컨펌 이상을 기다려야 한다.
ECDSA를 Schnorr 서명으로 바꾸면 50-of-50 멀티시그가 단일 키 지출 크기로 줄고 정책도 외부에 드러나지 않는다. Bitcoin Core 로드맵은 가장 큰 걸림돌로, 악의적 서명자가 다른 사용자의 키를 빼 버리는 상쇄 공격을 꼽았다. 이 공격에는 delinearization 기법으로 대응하지만 보안 증명은 아직 동료 검토 중이다.
기본 설정으로 돌린 Amazon EC2 테스트에서 새 노드의 초기 블록 다운로드가 Bitcoin Core 0.14.0에서는 6시간 24분, 0.13.2에서는 1일 12시간 40분 걸려 5.7배 빨라졌다. assumed valid 블록과, 멤풀과 UTXO 캐시가 함께 쓰는 메모리 덕분이다. 지갑에는 기본값이 꺼짐인 수수료 인상 옵션도 생겼다.
P2SH로 감싼 SegWit의 바이트 부담이 가장 크다. 180바이트 트랜잭션 기준 P2WSH/P2SH는 19%, P2WPKH/P2SH는 11%가 늘어난다고 Bitcoin Core는 BIP141의 영향을 따져 집계했다. 검증에는 트랜잭션당 SHA256 해시가 약 5번 더 든다. 버그, 블록 대형화, 수수료 하락을 위험으로 검토했으며, 저자들은 활성화에 대해 입장을 밝히지 않았다.
Bitcoin Core 0.13.1로 채굴자는 SegWit 소프트포크 신호를 보낼 수 있다. 신호는 2016년 11월 15일 이후 다음 난이도 조정 주기가 시작될 때 열린다. 2,016블록 주기에서 95%의 블록이 신호를 보내면 락인되고 한 주기 뒤 활성화된다. 지갑은 호환성이 유지되므로 채굴자 외에는 따로 조치할 일이 없을 수 있다.
SegWit이 자리 잡으려면 두 집단이 필요하다. 난이도 조정 주기에서 95% 블록에 비트 1 신호를 넣을 채굴자와, Bitcoin Core 0.13.1이나 호환 구현을 돌리는 충분한 수의 풀노드다. 신호는 2016년 11월 15일 또는 그 이후 첫 난이도 조정 시점에 열린다. 채굴자, 노드 운영자, 지갑 사용자, 개발자별로 따로 절차를 안내하며, 업그레이드하지 않기로 한 경우도 다룬다.
SegWit 코드가 Bitcoin Core 0.13.0에 들어갔지만 메인넷에서는 비활성 상태다. 메인넷에서 쓰려면 이후 버전이 필요하며, 0.13.1이 될 전망이다. 컴팩트 블록 릴레이(BIP152)가 대역폭 급증을 줄이고, 새 지갑은 BIP32 HD 키를 써서 백업 하나로 앞으로 만들 개인키까지 모두 포괄한다. 공식 다운로드에 Linux ARM 빌드도 추가됐다.