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

**URL:** <https://devforum.kaia.io/t/topic/3392>\
**Category:** Kaia\
**Tags:** servicechain\
**Created:** [1월 21, 2022, 4:52오전 UTC](https://devforum.kaia.io/t/topic/3392 "2022-01-21T04:52:06Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![sooyoung.kim](https://avatars.discourse-cdn.com/v4/letter/s/e9a140/32.png) [@sooyoung.kim](https://devforum.kaia.io/u/sooyoung.kim)\
**Post date:** [1월 21, 2022, 4:52오전 UTC](https://devforum.kaia.io/t/topic/3392/1 "2022-01-21T04:52:06Z")

</div>

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

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

```auto
> 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 의 로그를 보니 다음 로그가 보입니다.

```auto
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 의 잔액이 부족한 것도 아닙니다 (아래 보시는 것과 같이)…

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

```

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

> **[Klaytnscope](https://baobab.scope.klaytn.com/account/0x5a08b9b159b40bca32068768e529926440cfc9d8?tabId=txList)**
>
> Klaytnscope allows you to find data by monitoring network health and statistics of Klaytn as well as profiling blocks and transactions on Klaytn.

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

---

<div class="post-metadata">

**Author:** ![jeongkyun.oh88](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jeongkyun.oh88/32/1482_2.png) [@jeongkyun.oh88](https://devforum.kaia.io/u/jeongkyun.oh88)\
**Post date:** [1월 24, 2022, 3:50오전 UTC](https://devforum.kaia.io/t/topic/3392/2 "2022-01-24T03:50:36Z")

</div>

@sooyoung.kim 안녕하세요,

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

감사합니다.

---

<div class="post-metadata">

**Author:** ![jason\_kim1](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jason_kim1/32/1729_2.png) [@jason\_kim1](https://devforum.kaia.io/u/jason_kim1)\
**Post date:** [2월 6, 2022, 10:40오후 UTC](https://devforum.kaia.io/t/topic/3392/3 "2022-02-06T22:40:54Z")

</div>

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

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

- handleKLAYTransfer() 이게 어떻게 호출되는지도 궁금하네요.

```auto
> 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

```auto
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

> **[Klaytnscope](https://baobab.scope.klaytn.com/account/0x3ca7f638241f6E8d4569e2b57cd833A314ddcFbb?tabId=txList)**
>
> Klaytnscope allows you to find data by monitoring network health and statistics of Klaytn as well as profiling blocks and transactions on Klaytn.

---

<div class="post-metadata">

**Author:** ![sooyoung.kim](https://avatars.discourse-cdn.com/v4/letter/s/e9a140/32.png) [@sooyoung.kim](https://devforum.kaia.io/u/sooyoung.kim)\
**Post date:** [2월 7, 2022, 3:05오전 UTC](https://devforum.kaia.io/t/topic/3392/4 "2022-02-07T03:05:47Z")

</div>

> [@jason\_kim1](#):
>
> [Klaytnscope.com](https://baobab.scope.klaytn.com/account/0x3ca7f638241f6E8d4569e2b57cd833A314ddcFbb?tabId=txList)

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

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

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

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

```

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

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

```

---

<div class="post-metadata">

**Author:** ![jason\_kim1](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jason_kim1/32/1729_2.png) [@jason\_kim1](https://devforum.kaia.io/u/jason_kim1)\
**Post date:** [2월 7, 2022, 3:33오전 UTC](https://devforum.kaia.io/t/topic/3392/5 "2022-02-07T03:33:58Z")

</div>

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

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

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

---

<div class="post-metadata">

**Author:** ![jeongkyun.oh88](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jeongkyun.oh88/32/1482_2.png) [@jeongkyun.oh88](https://devforum.kaia.io/u/jeongkyun.oh88)\
**Post date:** [2월 7, 2022, 4:21오전 UTC](https://devforum.kaia.io/t/topic/3392/6 "2022-02-07T04:21:41Z")

</div>

@jason_kim1 안녕하세요,

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

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

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

> **[Value Transfer](https://docs.klaytn.com/node/service-chain/references/value-transfer)**

---

<div class="post-metadata">

**Author:** ![sooyoung.kim](https://avatars.discourse-cdn.com/v4/letter/s/e9a140/32.png) [@sooyoung.kim](https://devforum.kaia.io/u/sooyoung.kim)\
**Post date:** [2월 7, 2022, 4:25오전 UTC](https://devforum.kaia.io/t/topic/3392/7 "2022-02-07T04:25:52Z")

</div>

아 그리고, 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 를 어느정도 들고 있어야 합니다)

---

<div class="post-metadata">

**Author:** ![jason\_kim1](https://yyz1.discourse-cdn.com/flex035/user_avatar/devforum.kaia.io/jason_kim1/32/1729_2.png) [@jason\_kim1](https://devforum.kaia.io/u/jason_kim1)\
**Post date:** [2월 7, 2022, 6:29오전 UTC](https://devforum.kaia.io/t/topic/3392/9 "2022-02-07T06:29:56Z")

</div>

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