클레이튼에 관해 궁금한 점이 있습니다

클레이튼 기반의 플랫폼을 개발중인데, 궁금한 점이 생겨서 질문 드립니다.

  1. Klaytn의 블록사이즈가 얼마인지 궁금합니다. 메인넷과 테스트넷 모두 동일한 블록사이즈인지도 궁금합니다.
  2. Genesis Block에 초기 클레이 수량의 Reward가 0인데 클레이의 총 발행량을 어떻게 확인할 수 있을까요?
    클레이튼 문서에는 최초발행량 100억개라고 나와있는데, 클레이튼 스코프에서 해당 발행량을 확인할 수 있는 방법이 있는지 궁금합니다.

안녕하세요, 그라운드 X 김정현입니다.

먼저, 클레이튼 포럼에 질문을 올려주셔서 감사드립니다.

질문에 대해 답변 드리겠습니다.

  1. 블록사이즈가 정확히 무엇을 말씀하시는 걸까요? 각 블록의 크기는 각 블록에 트랜잭션이 얼마나 담겨있는지에 따라 달라집니다. 블록의 포맷은 테스트넷인 Baobab과 메인넷인 Cypress이 모두 동일합니다. 블록 헤더에 대한 정보는 아래 링크에서 확인하실 수 있습니다.
    https://github.com/klaytn/klaytn/blob/ddb8c478ac9805d06e210209c5e8a69b587cd8b6/blockchain/types/block.go#L51-L67

  2. 죄송하지만 KlaytnScope에서 확인하실 수 있는 방법은 현재는 없는 것으로 파악되고 있습니다. 총 발행량은 genesis.json 파일을 보시면 확인할 수 있습니다. genesis.json은 아래 파일에서 “cypressGenesisJson” 부분을 확인하시면 됩니다.
    https://github.com/klaytn/klaytn/blob/ddb8c478ac9805d06e210209c5e8a69b587cd8b6/blockchain/genesis_alloc.go
    맨 아래쪽에 보시면 genesis block에서의 발행량을 확인하실 수 있습니다.

        "22835801c15abee19f408c78cad1da41cbb6f0da": {
            "balance": "0xcecb8bc4978532dc1600000"
        },
        "24f55a6f46f126aa7209c882c275fedb6c108164": {
            "balance": "0x6765c793fa10079d0000000"
        },
        "79bf6868cb4f7d3dd43d915690f3556669afcf4e": {
            "balance": "0x6765c793fa10079d0000000"
        },
        "ba411543b06dca2fcc3730b2b09f40c5bb5cddd5": {
            "balance": "0x6765c793fa10079d0000000"
        },
        "854ca8508c8be2bb1f3c244045786410cb7d5d0a": {
            "balance": "0x3635c9adc5dea00000"
        }

각 balance는 peb단위이므로, 계산을 해보면 아래와 같이 각 주소별 KLAY를 확인할 수 있고, 총합은 100억 KLAY를 확인하실 수 있습니다.

22835801c15abee19f408c78cad1da41cbb6f0da 3,999,999,000 KLAY
24f55a6f46f126aa7209c882c275fedb6c108164 2,000,000,000 KLAY
79bf6868cb4f7d3dd43d915690f3556669afcf4e 2,000,000,000 KLAY
ba411543b06dca2fcc3730b2b09f40c5bb5cddd5 2,000,000,000 KLAY
854ca8508c8be2bb1f3c244045786410cb7d5d0a 1,000 KLAY
sum =  10,000,000,000 KLAY

참고로, KLAY의 화폐단위는 아래 링크에서 확인하실 수 있습니다.
https://docs.klaytn.com/klaytn/design/klaytn-native-coin-klay#units-of-klay
https://ko.docs.klaytn.com/klaytn/design/klaytn-native-coin-klay#units-of-klay

답변이 되셨기를 바라며, 부족한 부분은 추가 질문해주시면 답변해 드리도록 하겠습니다. 감사합니다.

안녕하세요. 김정현님.
답변 감사합니다.

1번 질문은 Block Size의 최댓값을 알고 싶어서 드린 질문입니다.
블록에 담긴 트랜잭션 수와 종류에 따라 블록사이즈는 달라지겠지만 블록의 최댓값이 존재하는지 궁금했습니다.

예를 들어, 아래와 같은 컨트랙트가 있습니다.

contract Data {
    string x;
    function write(string memory _x) public {
        x = _x;
    }
    function read() public view returns (string memory) {
        return x;
    }
}

dataContract.write(data)와 같이 data를 저장할 때 data.lengh를 4000으로 보내고 있는데 얼마로 보내면 적당할까요?
그리고 한 블록에서 여러개의 Data contract에서 dataContract.write(data)를 각각 호출해도 문제가 없을지 궁금합니다.

안녕하세요, 추가 답변 드립니다.

제가 질문을 제대로 이해했는지는 잘 모르겠습니다만, 아래와 같이 답변을 드릴 수 있을 것 같습니다.

  1. 일단 한 블록에서 어떤 트랜잭션이 담길지는 Klaytn의 consensus node가 결정하는 문제라서, 컨트랙트 개발자의 입장에서 블록 사이즈를 고려하실 필요는 없을 것 같습니다. 다만 말씀하시는 것처럼 트랜잭션 하나에 대해서는 고려를 하셔야 할 것 같습니다. 일단 트랜잭션의 최대 크기는 32KB입니다. RLP encoding된 byte를 기준으로 계산하여 32KB를 초과할 경우에는 Klaytn network으로 tx를 전송하실 수 없으며, "oversized data"라는 에러를 반환합니다.
  2. 한 블록에서 여러개의 data contract에 대해서 dataContract.write(data)를 호출하는 것은 여러 트랜잭션을 전송한다는 의미로 파악이 됩니다. 그럴경우에는 트랜잭션이 하나의 블록에 담길지 다른 블록에 담길지는 consensus node가 판단하는 부분이어서 만약 한 블록에 담기지 못할 경우에는 서로 다른 블록에 담겨지게 됩니다.

답변이 되셨기를 바라며, 부족한 부분은 추가 질문해주시면 답변해 드리도록 하겠습니다. 감사합니다. :slight_smile:

1 Like

감사합니다.
블록체인의 이해도가 떨어져 질문 내용이 두서가 없었네요 ㅠㅠ
답변해 주신 내용을 통해 제가 궁금했던 점이 모두 해소 되었습니다.

다시 한 번 답변 감사드립니다 :smile:

1 Like

네, 충분한 답변이 되셨길 바랍니다.

앞으로 추가적인 궁금증이 생기시면 언제라도 Klaytn forum에 질문 부탁드리겠습니다.

감사합니다 :laughing: