Technology

Klaytn v1.10.0 릴리즈 노트

v1.10.1 hotfix 릴리즈 노트

Klaytn v1.10.0이 릴리즈 되었습니다.

Klaytn v1.10.0 은 호환되지 않는 하드포크 업그레이드가 포함되어 있습니다. 따라서 모든 Baobab/Cypress 노드들은 타겟 블록 번호 전에 v1.10.0 또는 그 이상으로 업그레이드해주세요. 이번 하드포크의 이름은 “코어(Kore)” 입니다. 이 하드포크에는 [KIP-81]에서 제안된 온체인 거버넌스 투표 기능과 [KIP-82]에서 제안된 새로운 거버넌스 카운슬 보상구조 개편 및 EVM 변경이 포함되어 있습니다.

하드포크 일정은 아래와 같습니다:

코어 하드포크 블록넘버 & 예정일

  • Baobab 테스트넷: 111,736,800 블록 (예정 시간: 10 Jan, 10:00 AM UTC+9)Cypress: 3월말 예정, 추후 공지

v1.10.0 및 코어 하드포크에 대한 주의사항

아래 내용은 Klaytn 생태계 참여자들을 대상으로 한 주의사항입니다. 적용하기 전 꼭 읽어보세요.

블록 탐색기(Scope, Finder) 및 거버넌스 분석 툴

  • 코어 하드포크 이후에는 KIP-81에 따른 스마트 컨트랙트에서 거버넌스 투표가 진행됩니다. 기존의 블록헤더 투표 메커니즘은 컨트랙트 기반 메커니즘에 대한 대체적 차선책으로만 사용됩니다. 확정된 거버넌스 데이터는 governance_chainConfigAt(num) 또는 klay_chainConfigAt(num) API에서 조회할 수 있습니다. 투표 데이터 분석에 대한 더 자세한 문서는 거버넌스 컨트랙트 배포 후 공개될 예정입니다.
  • 코어 하드포크 이후에는 KIP-82에 따라 블록보상이 모든 유효한 스테이킹 주체(CNs)들 및 블록 제안자에게 분배될 예정입니다. 지니 계수는 제안자 선출 시에 고려되지 않기 때문에, 제안자 보상 또한 공정하게 분배될 것입니다. 소각된 양을 포함한 보상 분배에 대한 자세한 정보는 새로 도입된 klay_getRewards(num) API를 통해 확인할 수 있습니다.

노드 운영자

  • 모든 노드들은 코어 하드포크 블록 넘버 이전에 v1.10.0으로 버전을 업데이트해야 합니다. Cypress 하드포크 블록 넘버는 Baobab 네트워크에서의 안정성 검증 후 다음 Klaytn 버전에서 명시될 것입니다.
  • v1.10.0 업그레이드 이후에는 NTP를 이용한 시간 동기화가 필수적입니다. 노드가 NTP 서버와 동기화하는 것이 어려울 경우, 노드 설정에 -ntp.disable플래그를 추가해주세요.
  • v1.10.0 업그레이드 이후 노드 운영자들은 rpc.unsafe-debug.disable 플래그를 사용하여 debug API의 일부 기능을 제한할 수 있습니다. debug API는 신뢰할 수 있는 사용자들에게 공개되어야 하지만, 일부 API들은 악성 사용자에게 노출이 되었을 시 중대한 문제를 야기할 수 있습니다. 자세한 내용은 이 PR의 “Further comments”에서 확인하세요.
  • v1.10.0 업그레이드 이후 새로운 노드 플래그-snapshot-ntp.disable-ntp.server-rpc.evmtimeout가 도입됩니다. 더 자세한 정보는 아래를 확인하세요.

dApp 개발자

  • *v1.10.0 업그레이드 이후, 노드 운영자들은 특수한 설정을 통해 debug API의 일부 기능을 제한할 수 있습니다. 자세한 내용은 이 PR*의 “Further comments” 섹션에서 확인하세요.
  • 코어 하드포크 이후에는 EIP-4399의 도입과 함께 opDifficulty가 opRandom로 대체됩니다. opcode 0x44는 블록 난이도가 아닌 이 직전 블록의 해시값을 반환하게 됩니다.
  • 코어 하드포크 이후에는 EIP-2929의 도입과 함께 SLOADCALLBALANCEEXT*와 SELFDESTRUCT가 트랜잭션에서 최초로 쓰일 경우 의 가스비가 증가합니다. 미리 컴파일된 컨트랙트 ModExp의 가스비는 EIP-2565의 도입과 함께 정의됩니다.
  • 코어 하드포크 이후에는 EIP-3529의 도입과 함께 SELFDESTRUCT와 SSTORE에 대한 가스비 반환이 감소합니다.
  • 코어 하드포크 이후에는 EIP-3541의 도입과 함께 0xEF 바이트로 시작하는 컨트랙트는 배포가 실패합니다.

생태계 참여자

  • v1.10.0 업그레이드 이후, 블록 제안자 선출 과정에서 지니 계수가 폐지됩니다. 즉 모든 CN들이 동일한 확률로 블록을 생성하게 됩니다. 보상은 KIP-82에 따라 분배됩니다. 블록 생성량의 일부는 스테이킹 주체들에게 분배되는데, 이는 각 CN의 KLAY 예치량에 비례합니다.

## 코어 하드포크 신규기능

코어 하드포크 이후 아래 기능들이 적용됩니다. 네트워크 별 하드포크 넘버에 따라 적용 시점이 다릅니다.

  • 모든 위원회 멤버들이 동일한 확률로 블록 제안자 선출 (#1655)KIP-81: 온체인 거버넌스 투표 방식 구현 (#1512 #1604 #1614 #1623 #1639 #1640 #1711)컨트랙트 기반 온체인 거버넌스 메커니즘 지원을 위한 업그레이드블록 헤더나 거버넌스 파라미터 컨트랙트에 거버넌스 configuration 저장KIP-82: 지니계수 폐지에 따른 새로운 GC 보상 구조 (#1631 #1642 #1666 #1692 #1709 #1727 #1729 #1734)블록 제안 보상을 민팅 보상 및 스테이킹 보상으로 분리모든 블록 생성 및 블록 제안 보상에 스테이킹 보상 분배특정 블록의 소각분량을 포함한 보상 분배 정보를 반환하는 klay_getRewards APIEIP-2565ModExp 가스비 (#1705)EIP-2929: state 접근 opcode에 대한 가스비 증가 (#1705)EIP-3529: 환불 금액 축소 (#1705)EIP-3541: 0xEF 바이트로 시작하는 새 컨트랙트 코드 거절 (#1681)EIP-4399DIFFICULTY opcode를 RANDOM으로 대체 (#1680)

## 개선사항

  • client.Client가 새로운 HTTP 헤더를 설정할 수 있도록 설정 (#1632)*-*snapshot플래그를 도입한 비동기적 스냅샷 데이터 생성 기능 추가 (#1634)
  • NTP를 통한 시간 동기화 개선 및 NTP configuration 플래그, *-*ntp.disable과 *-*ntp.server 도입 (#1641 #1651 #1669)gorilla 웹소켓 라이브러리 도입 및 양방향 커뮤니케이션 지원 (#1652)이더리움 호환성을 위한 DeriveSha 구현 타입 추가 후 거버넌스 아이템으로 등록 (#1648 #1689 #1693 #1708 #1716)RPC 서버의 메모리 사용 축소 (#1650)klay_getLogs API에 blockHast 필터 옵션 추가 (#1653)debug_setHead API에 decimal 블록 숫자 허용 (#1697)상태 데이터 베이스 검증을 위한 snapshot 서브 커맨드 추가 (#1701)governance_chainConfigAt API 추가 및 새 거버넌스 기능 지원을 위한 governance_chainConfig 업데이트 (#1704 #1724)debug API 네임스페이스에서 unsafedebug API 네임스페이스 분리. unsafedebug 네임스페이스는 악성 공격에 취약할 수 있는 API 포함 (#GHSA-4vx6-m7jv-g2ch #1722)debug와 unsafedebug API 리스트는 여기에서 확인할 수 있습니다.klay와 governance 네임스페이스에서 getStakingInfonodeAddresschainConfigchainConfigAtgovParamsAt API 지원. (#1731)노드 운영자의 노드 자원 관리를 위한 EVM execution timeout 플래그 — rpc.evmtimeout 도입 (#1736)

## 수정– ERC721 전송 중 ServiceChain 브리지 운영자의 의도하지 않은 가스 소모 완화(#1445)- 비 WeightedRandom 제안자 선출의 nil 액세스 문제 수정 (#1600)- 백업 추가 블록을 통한 프로세스 강제 종료로 인해 드물게 발생하는 데이터베이스 손상 문제 수정 (#1630)- 처리 후 스토리지 스냅샷 데이터를 데이터베이스로 플러시(flush) (#1635)– 이스탄불 컨센서스 엔진에서 CommittedSeals를 항상 확인하도록 수정됨 (#1678)- debug.traceBlock API 호출로 인한 gov.changeSet 손상 문제 해결 (#1706)- klay_getLogs API에서 적용되지 않은 블록 범위 필터 문제 수정 (#1715)- eth_getProof API에서 항상 EmptyRootHashOriginal을 사용하도록 수정 (#1726)

## 기타– Prometheus 메트릭에 Klaytn 바이너리 버전 정보 추가 (#1488)- chaindatafetcher에 대한 더 나은 가독성과 더 많은 정보 제공 (#1587 #1611)- 통합 Datadog HTTP 추적기 연동 (#1594 #1730)- 파일 이름이 reward#인 보상 계정 키스토어를 생성하도록 Homi 개선 (#1605)- MagmaHeader 확인을 위한 nil 검사 논리 추가 (#1608)- golang에서 TLS 연결을 지원하도록 Dockerfile 수정 (#1616)- “Returning since the addr is not a program account”의 로그 수준을 디버그로 하향 (#1643)- P2P 메시징 프로토콜의 크기 제한을 10MB에서 12MB로 증가 (#1658)- ServiceChain 제네시스에 대해 더 많은 잔액을 할당하도록 Homi 업데이트 (#1683)- homi의 yaml configuration에서 genesis.json, 키 등 생성 (#1661)- 기타 업데이트 (#1552 #1575 #1598 #1638 ****#1639 ****#1640 ****#1667 ****#1668 #1685 #1696 #1714 #1717 #1718 #1720 #1723 #1725 #1735)

debug API를 사용하여 취약점을 리포트해준 ChainLight에 감사의 인사를 드립니다. 일부 debug API를 이용한 공격 시나리오를 제시하면서 이를 위한 해결책으로 #GHSA-4vx6-m7jv-g2ch #1722 #1746 또한 제안해주었습니다.

해당 업데이트에 대한 더 자세한 내용은 이 링크를 참고하세요. Medium에 구독해서 더 많은 Klaytn 소식을 만나보세요.

v1.10.1 Release Notes (Added Jan 6)

  • fasthttp 핸들러에서 패닉 방지를 위해 fasthttp 서버 StreamRequestBody 옵션 비활성화 (#1752)
  • miscDB에서 하위 호환성 유지를 위해 Governance struct의 chainConfig 부활 (#1749)