서비스 체인에서 체인 간 밸류 트랜스퍼 질문

안녕하세요, 제가 service chain 을 구성하여 baobab 네트워크와 연동을 한 상태입니다.

service chain 구성 후, bridge contract 도 성공 적으로 배포를 하고 register 한 상태입니다. 아래는 service chain에서 실행한 명령어들입니다.

> subbridge.listBridge
[{
    childAddress: "0x31345eacfc7ceffb922b70e5e59d2cd21821429d",
    parentAddress: "0x5a08b9b159b40bca32068768e529926440cfc9d8",
    subscribed: true
}]
> subbridge.getBridgeInformation("0x31345eacfc7ceffb922b70e5e59d2cd21821429d")
{
  counterPart: "0x5a08b9b159b40bca32068768e529926440cfc9d8",
  handleNonce: 0,
  isRunning: true,
  isSubscribed: true,
  lowerHandleNonce: 0,
  onServiceChain: true,
  pendingEventSize: 0,
  requestNonce: 3
}
> subbridge.getBridgeInformation("0x5a08b9b159b40bca32068768e529926440cfc9d8")
{
  counterPart: "0x31345eacfc7ceffb922b70e5e59d2cd21821429d",
  handleNonce: 0,
  isRunning: true,
  isSubscribed: true,
  lowerHandleNonce: 0,
  onServiceChain: false,
  pendingEventSize: 0,
  requestNonce: 4
}

제가 체인 간 value transfer 를 해보려고 하는데요,
child bridge contract 의 requestKLAYTransfer() 함수를 성공적으로 몇 번 호출을 했습니다. 그리고 parent bridge contract의 requestKLAYTransfer() 함수도 몇 번 호출을 해보았구요. 하지만 체인 간 Klay 전송이 안되고 있는 것 같습니다.

Service chain 의 로그를 보니 다음 로그가 보입니다.

INFO[01/21,13:46:41 +09] [45] VT : Parent -> Child Chain                request=3 handle=0 lowerHandle=0 pending=3
INFO[01/21,13:46:41 +09] [45] VT : Child -> Parent Chain                request=4 handle=0 lowerHandle=0 pending=4

계속 pending 만 되고 handle 은 안되는데요, 왜 handle 은 안되고 있는지 혹시 도움을 주실 수 있을까요 ㅜㅜㅜ

operator 의 잔액이 부족한 것도 아닙니다 (아래 보시는 것과 같이)…

> subbridge.childOperator
"0x60d2c167ad673ddeef4f3a734f1a14963e476d7a"
> subbridge.childOperatorBalance
99999999904428380000
> subbridge.parentOperator
"0x6f2d570492f1786ca538cacfd43b2360a468fc17"
> subbridge.parentOperatorBalance
10621336400000000000

또한, 다음 링크는 baobab 환경의 klaytnscope 에서 parent bridge contract 를 검색한 페이지입니다.

계속 뭔가 트랜젝션이 일어나고 있는데 (제가 보기에 bridge contract의 handleKLAYTransfer() 함수를 호출하고 있는 것으로 보입니다), 실패를 하고 있네요…누구든지 도움을 주시면 감사드리겠습니다…

@sooyoung.kim 안녕하세요,

msg.sender is not an operator라는 에러로 revert가 되는 상황인데요,
각 브릿지의 operator계정이 올바르게 세팅되어있는지 확인부탁드립니다.

감사합니다.

1개의 좋아요

@sooyoung.kim
저도 거의 같은 상황인데요 혹시 해결 하셨을까요?

parent bridge contract의 requestKLAYTransfer()를 호출했는데 parent bridge까지 KLAY 전송은 되는데 child bridge의 체인간 KLAY 전송이 안되는것 같습니다.

  • handleKLAYTransfer() 이게 어떻게 호출되는지도 궁금하네요.
> subbridge.listBridge
[{
    childAddress: "0xb84754aaa4e9b30041c9476b311a008a0d7b6428",
    parentAddress: "0x3ca7f638241f6e8d4569e2b57cd833a314ddcfbb",
    subscribed: true
}]
>
> subbridge.getBridgeInformation("0xb84754aaa4e9b30041c9476b311a008a0d7b6428")
{
  counterPart: "0x3ca7f638241f6e8d4569e2b57cd833a314ddcfbb",
  handleNonce: 0,
  isRunning: true,
  isSubscribed: true,
  lowerHandleNonce: 0,
  onServiceChain: true,
  pendingEventSize: 0,
  requestNonce: 2
}
>
> subbridge.getBridgeInformation("0x3ca7f638241f6e8d4569e2b57cd833a314ddcfbb")
{
  counterPart: "0xb84754aaa4e9b30041c9476b311a008a0d7b6428",
  handleNonce: 0,
  isRunning: true,
  isSubscribed: true,
  lowerHandleNonce: 0,
  onServiceChain: false,
  pendingEventSize: 0,
  requestNonce: 0
}
>
> subbridge.parentOperatorBalance
18650679750000000000
>
> subbridge.childOperatorBalance
1e+21
>

service chain log

INFO[02/07,06:33:33 +09] [49] Mining too far in the future              wait=1s
INFO[02/07,06:33:33 +09] [45] VT : Parent -> Child Chain                request=2 handle=0 lowerHandle=0 pending=2
INFO[02/07,06:33:33 +09] [45] VT : Child -> Parent Chain                request=0 handle=0 lowerHandle=0 pending=0
INFO[02/07,06:33:34 +09] [49] Commit new mining work                    number=548374 hash=93e551…a7ac91 txs=0 elapsed=71.066µs    commitTime=41.369µs  finalizeTime=27.737µs
INFO[02/07,06:33:34 +09] [25] received more than 2f agreements and change state to prepared  msgType=1
INFO[02/07,06:33:34 +09] [24] Committed                                 number=548374 hash=412dcf…5005ab address=0xCEdff5D43C8C3ffe26Dcf27456DB18e0152349C1
INFO[02/07,06:33:34 +09] [49] Successfully sealed new block             number=548374 hash=412dcf…5005ab
INFO[02/07,06:33:34 +09] [49] Successfully wrote mined block            num=548374 hash=412dcf…5005ab txs=0 elapsed=2.077555ms

baobab parent bridge contract

서비스 체인 네트워크의 bridge contract 에 child operator 주소가 operator 로 등록이 안되어 있을 확률이 클 것 같습니다. 서비스 체인 네트워크의 bridge contract 의 getOperatorList() 함수를 호출해서 확인해보시는 것을 추천드립니다.

만약 틀리다면 저도 잘 모르겠네요…

그리고 제가 이해한 바로 한 쪽 네트워크에서 requestKLAYTransfer() 함수를 호출하면 다른 네트워크에서 handleKLAYTransfer() 가 호출된다고 알고 있습니다. 예를 들어

1. Parent chain 에서 requestKLAYTransfer() 가 호출됨
2. 서비스 체인 네트워크에서 child operator 가 handleKLAYTransfer()를 합니다.

반대의 케이스에서는 아래와 같습니다

1. 서비스 체인 네트워크에서 requestKLAYTransfer() 가 호출됨
2. Parent chain 에서 handleKLAYTransfer()를 parent operator 주소가 호출합니다
1개의 좋아요

댓글 감사합니다.
getOperatorList로 확인해 봤는데 오퍼레이터로 등록이 되어 있네요.
무슨 문제인지를 모르겠네요.
시간 내 주셔서 감사합니다.

handleKLAYTransfer() 호출 부분은 구독이 되어 있을때 그럴것이라고 추측됩니다만
코드레벨에서 어떻게 동작을 하는지가 궁금해서 질문을 드렸습니다.

@jeongkyun.oh88 @Aidan
위 문제에 대해서 조언을 얻을수 있을까요?
바쁘시겠지만 부탁드리겠습니다.

@jason_kim1 안녕하세요,

Value Transfer의 경우 브릿지 컨트랙트로 KLAY전송만으로 전달됩니다.
컨트랙트 함수를 호출할 필요가 없습니다.

컨트랙트로 KLAY전송 시, 이벤트 로그(RequestValueTransfer)가 발생하고요,
해당 이벤트로그를 서비스체인에서 (또는 메인체인에서) subscribe하고 있고,
오퍼레이터가 이벤트를 기준으로 해당 value를 전송하는 방식으로 동작합니다.

아래 문서 확인 한번 부탁드립니다.

아 그리고, bridge contract 도 KLAY 를 들고 있어야 합니다. 즉, parent operator, child operator 외에 bridge contract 가 KLAY를 들고 있어야 할 것입니다.

Parent chain 의 requestKLAYTransfer() 가 호출될 시, 서비스체인 네트워크의 child operator 와 bridge contract 모두 다 KLAY 들고 있어야 합니다.

Child operator 는 수수료를 낼 양의 KLAY, 그리고 bridge contract 는 체인간 KLAY 전송을 수행하기 위한 양의 KLAY 를 가지고 있어야 합니다

반대의 경우도 성립하구요 (즉, 서비스 체인에서 parent chain 으로 KLAY 를 전송하려고 할 시, parent chain 의 bridge contract 가 parent chain KLAY 를 어느정도 들고 있어야 합니다)

2개의 좋아요

오우… 너무 감사합니다.
bridge contract에도 KLAY를 갖고 있어야 하는군요… !!!

1개의 좋아요