Klaytn(cypress)와 저희 서비스 체인 앵커링 문의

전통적인 방식으로 서비스체인과 메인체인을 연결하면 앵커링 주기가 어떻게 되나요? (api 사용 아님)
설명서에는 ‘주기적으로’ 라고만 나와 있어서 문의 드립니다.
그리고, 설명서에 보면 메인넷의 경우 새로 생성된 부모주소에 1e+50 의 klay가 필요한가요? 그렇다면 미리 klay도 확보해야 하는건가요?
주기적으로 앵커링 될 때 한번의 트랜잭션에 얼마의 klay를 사용하는지 궁금합니다.

안녕하세요. 문의 주셔서 감사합니다.

서비스체인과 메인체인을 연결하여을때 Anchoring 주기는 서비스체인의 블록내용을 얼마의 간격으로 메인체인에 기록하여 사후 검증시 어느정도의 간격으로 검증이 가능하냐는 점을 고려하시어 정해주시면 됩니다.

직접 서비스체인을 메인체인과 연결하시어 사용하는 경우 transaction을 발생시킬만큼의 KLAY가 parent operator에 필요합니다. (Anchoring - Klaytn Docs)

또는 KAS를 이용하실수도 있으시며 이때에는 KLAY 또는 원화 결재로도 가능하십니다.
자세한 내용은 KAS Pricing 문의를 부탁드립니다.(Klaytn API Service)
KAS Anchoring - Klaytn Docs

Anchoring Trasnaction의 비용은 실제 input data 용량에 따라 달라질수 있으나 아래 trasnaction과 같이
0.000985정도의 KLAY를 감안하시면 되겠습니다.

정확한 계산법은 21000 + 100 * input data의 byte 사이즈 만큼의 gas를 소모합니다.

감사합니다.

안녕하세요. 우선 답변 감사드립니다.

답변에서 추가 문의 사항이 있습니다.

메인체인에 기록하여 사후 검증시 어느정도의 간격으로 검증이 가능하냐는 점을 고려하여 정해주시면 됩니다. 라고 하셨는데요.

앵커링 관련 Doc에서 찾아본 결과 주기를 설정하는 방법이 없어서 문의 드립니다.
앵커링을 켜는 기능 subbridge.anchoring(true) 외에는 찾질 못했습니다.

감사합니다.

안녕하세요.

말씀해주신 anchoring 주기에 대해서는 실행 옵션에서 설정하실수 있습니다.
kscnd.conf 나 ksend.conf 파일에서 아래 내용을 변경하여 노드를 재시작하시면 되겠습니다.

...
SC_ANCHORING=0
SC_ANCHORING_PERIOD=1            #이 값의 anchroing block 주기 입니다.
SC_TX_LIMIT=1000
...

해당 내용은 문서를 참고해주시면 되겠습니다만 현재 옵션명이 변경되어 업데이트를 하도록 하겠습니다.

감사합니다.

감사합니다.

답변 감사합니다.
추가로 하나 더 문의드립니다ㅠ

앞서 gas비가 21000+100*input data로 말씀해주셨는데요.
소스 상에 feeDelegation을 할 수 있는 것으로 보이는데, 노드끼리 직접 연결한 경우 Tx에 feeDelegation을 설정할 수 있나요?
만약에 할 수 있다면, feeDelegation dataAnchoring은 feeDelegation fee인 10000이 더해져서 21000 + 10000 + 100 * input data의 gas 소비가 일어나는지요?

감사합니다.

안녕하세요. 서비스체인을 사용해주셔서 감사합니다.

넵 코드적으로 Anchroing Tx발생시 대납기능을 제공하고 있습니다만 아직 Docs로 제공해드리지 못하였습니다.
말씀하신데로 대납기능을 사용하면 feeDelegateion fee가 추가되는 것이 맞습니다.

feeDelegation를 사용하는 방법은 추후 문서로 제공을 하도록 하겠습니다.

간단하게 관련 내용을 말씀드리면 subbridge node에서 아래와 같이 계정을 생성하고 해당 계정을 대납계정으로 등록하여 사용하는 방식으로 해당 계정 주소로 상위 체인상에서 balance가 존재해야합니다.

> personal.newAccount("test")
"0x28af58f25cc95ea0f8d3aadc04bec659ccbc28e9"

> personal.unlockAccount("0x28af58f25cc95ea0f8d3aadc04bec659ccbc28e9","test", 0)
true

> subbridge.parentOperatorFeePayer                   // 미등록되어 있는 경우 0x00주소로 설정
"0x0000000000000000000000000000000000000000"

> subbridge.setParentOperatorFeePayer("0x28af58f25cc95ea0f8d3aadc04bec659ccbc28e9")
null

> subbridge.parentOperatorFeePayer
"0x28af58f25cc95ea0f8d3aadc04bec659ccbc28e9"

> subbridge.anchoring(true)          // Anchor를 활성화하기전에 feePayer 주소로 KLAY가 있어야합니다.
true

감사합니다.

1 Like

앵커링 설정하다보니 계속 문의 사항이 생기네요.

이번 질문은 블록주기를 정할 수 있다고 하신부분에서,
Cypress에 올라가는 앵커링 데이터는 Tx 들의 해시라고 알고 있는데요.
그러면 예를 들어 3600블록(1시간)으로 주기를 정해 놓고 아래와 같이 결과를 확인 했는데요.

klay.getDecodedAnchoringTransactionByHash("0x3ead6fd888e24e38cf56b59f0d9c2ae61fe742e6e6c693e00c29f9c5c5b6fae6")
{
  blockCount: 3600,
  blockHash: "0xee8d9893e5e0d70dc082819800943f7e45f0c9848700d8c643955fe5d34e022a",
  blockNumber: 1112400,
  parentHash: "0x856d91e643a24ed963a6778783d826bb79aa7007a52c9ede1e31f11231bc73e9",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  stateRoot: "0x7066f1347f2bea23c934440393ae5e3f105a9b4b06acf9838fa745ab2fac7554",
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  txCount: 1
}

저 내용에서,
blockHash, blockNumber, parentHash는 서비스체인의 값과 일치하는데,
receiptsRoot, stateRoot, transactionsRoot는 어떻게 만들어지는 건지 문의 드립니다.

  1. 설정하고 보니 노드가 재시작되면 subbridge.addPeer(“kni~~”) 부분이 없어져서 다시 설정을 해줘야만 앵커링이 되는데요. 노드가 재시작되어도 자동으로 연결되거나, 없어지지 않도록 하는 방안 문의드립니다.

안녕하세요

해당 Anchroing data는 해당 블록의 parentHash, receiptsRoot, stateRoot, transactionsRoot와 일치합니다
아래 API(klay_getblockbynumber)로 조회를 해보시면 확인가능하십니다.
https://docs.klaytn.com/bapp/json-rpc/api-references/klay/block#klay_getblockbynumber

그리고 subbridge에 mainbridge node의 정보를 static 파일로 설정할수 있습니다.
아래 문서를 참고 부탁드립니다.

https://docs.klaytn.com/node/service-chain/getting-started/en-scn-connection#step-6-create-main-bridges-json

감사합니다.

1 Like

안녕하세요.
저희가 PN 기능을 하는 서버가 여러대 있는데, 그 중에 한대를 앵커링용으로 사용해서 설정을 하고 재시작을 했습니다. 상대쪽 체인과 앵커링 데이터가 잘 가는 것은 확인하였습니다.
하지만 앵커링을 설정한 PN이 다른 PN들과 피어링을 잘 맺지 못하고 있습니다.
PN이 5대라면 peer count가 4가 나와야 되는데, 앵커링한 PN은 peer count가 계속 1로 되어 있습니다. 그나마 한개라도 연결해서 블록데이터를 받고는 있어서 다행이긴한데요.
로그상으로 다른 static-node.json에 있는 PN들과 연결시도를 계속하는데도 연결이 되지 않습니다.

추가로 혹시 SC_TX_LIMIT=1000 이건 뭘 의미하는 건가요?
service-chain에서 cypress-chain으로 최대 한번에 보낼 수 있는 트랜잭션 값인가요? 아니면 누적되어 1000번이 쌓이면 더 이상 보낼 수 없는 값인가요?

안녕하세요.

PN의 노드 연결은 static.nodes.json에 peer의 정보(nodekey, IP, port)가 맞다면 정상적으로 연결이 되어야합니다.
만약에 안된다면 방화벽을 의심해볼수 있을것 같은데요. 해당 PN에서 telent등으로 상대 peer의 port로 접근해보시기 바랍니다. 또한 debug.verbosity(4)를 통해 debug log를 보신다면 연결이 왜 안되는지 보실수 있습니다.

SC_TX_LIMIT는 서비스체인 노드(subbridge)에서 상위체인을 위해서 보관가능한 최대 Tx 갯수입니다.
상위체인 노드의 이슈가 있거나 balance가 부족하거나 nonce가 맞지 않으면 하위체인의 subbridge node에서 tx가 쌓이게됩니다. 그 쌓이는 Tx의 최대 허용 개수 입니다.

	SentChainTxsLimit = cli.Uint64Flag{
		Name:  "chaintxlimit",
		Usage: "Number of service chain transactions stored for resending",
		Value: 100,
	}

감사합니다.

1 Like