Service chain 구성 중 bridge contract 배포 실패 문제

안녕하세요,

Service chain 구축 중에 질문이 있어 문의드립니다.

저는 https://docs.klaytn.com/node/service-chain 이 가이드에 나와있는대로 service chain 네트워크를 성공적으로 구축했으며, baobab 환경에서 실행되고 있는 endpoint node 와 연결을 성공했습니다 (anchoring 도 정상적으로 되는 것을 확인했습니다. 확인 방법은 klaytnscope 에서 anchoring TX 가 보이는 것을 확인). 그 다음에 parent chain 과 child chain 간에 KLAY, 또는 ERC-20 토큰 전송을 할 수 있도록 공식 가이드를 따르고 있습니다.

하지만 bridge contract 배포 과정(https://docs.klaytn.com/node/service-chain/references/value-transfer#deployment)에서 문제를 겪고 있습니다

가이드에서는 subbridge.deployBridge() 명령어를 실행하면 자동으로 bridge contract 가 배포가 되는데요, 저는 그렇지 않습니다. 제가 실행한 명령어를 아래에 나열하겠습니다.

> subbridge.peers.length
1
> subbridge.childOperatorBalance
99999999930000000000
> subbridge.parentOperatorBalance
11922330000000000000
> subbridge.deployBridge()
Error: no contract code after deployment
    at web3.js:3276:20
    at web3.js:6450:15
    at web3.js:5214:36
    at <anonymous>:1:1

>

위 보이는 것과 같이 child operator 에도 balance 가 있고, parent operator 에도 balance 가 충분히 존재하는데 bridge contract 배포가 안되네요 ㅜㅜ

그래서 제가 kscnd.out 로그 파일을 관찰하면서 subbridge.deployBridge() 를 하는 순간에 찍히는 로그를 관찰했습니다. 아래와 같은 로그가 찍힙니다.

ERROR[01/19,11:12:52 +09] [45] Failed to WaitDeployed.                   err="no contract code after deployment"                                           txHash=0xc604dc3fc9a5d9a2e0caf6b90f00c5fe233e27c5e923b279210d6927fe457647
ERROR[01/19,11:12:52 +09] [45] Failed to deploy child bridge.            err="no contract code after deployment"

그래서 제가 저기에 보이는 TX Hash 를 조사해보니 아래와 같은 결과가 보였습니다.

> klay.getTransactionReceipt('0xc604dc3fc9a5d9a2e0caf6b90f00c5fe233e27c5e923b279210d6927fe457647')
{
  blockHash: "0x5ae77b8131d3a53f8ef298137ae68d6c86709a29c7d20229ec51c0d3d00c32ce",
  blockNumber: 227983,
  contractAddress: "0xb30326658302334d5d5c4d71b17452447c63bc1c",
  from: "0x60d2c167ad673ddeef4f3a734f1a14963e476d7a",
  gas: "0x4c4b40",
  gasPrice: "0x3e8",
  gasUsed: 5000000,
  input: "너무 길어서 생략...",
  logs: [],
  logsBloom: "너무 길어서 생략...",
  nonce: "0xf",
  senderTxHash: "0xc604dc3fc9a5d9a2e0caf6b90f00c5fe233e27c5e923b279210d6927fe457647",
  signatures: [{
      R: "0xe1e24a090fbc245cf5482559ac82174138f21182d8912c69e6ff584a64d682bf",
      S: "0x12c56527caa81204e96d7314ab8bc2270890020a21b44cf9797b1476f2ff4192",
      V: "0x30596"
  }],
  status: "0x0",
  to: null,
  transactionHash: "0xc604dc3fc9a5d9a2e0caf6b90f00c5fe233e27c5e923b279210d6927fe457647",
  transactionIndex: 0,
  txError: "0x5",
  type: "TxTypeLegacyTransaction",
  typeInt: 0,
  value: "0x0"
}

보시면 gas 값과 gasUsed 값이 같고, txError 가 0x5 인 것으로 보아서 gas 가 충분하지 않아서 생기는 문제인 것 같습니다.

결론적으로 제가 알고 싶은 것은 subbridge.deployBridge() 를 할 때에 gas 값을 조정할 수 있는 방법이 있나요? 아니면 이 문제(bridge contract 배포 실패 문제)를 해결 할 수 있는 다른 방법이 있을까요? (예를 들어, bridge contract 를 수동으로 배포할 수 있도록 bridge contract 의 sol 파일을 제공해주시거나 등등…)

답변 주시면 감사하겠습니다.

답변 주시면 감사하겠습니다 ㅜㅜ bridge contract 를 배포 할 수 있는 방법이 없는 것일까요?

안녕하세요. 클레이튼 포럼에 글을 남겨주셔서 감사합니다.
배포를 하는 account가 혹시 unlock된 상태였을까요?
from account가 unsigned transaction을 받아들일 수 있도록 하는 과정이 필요할 것 같습니다.
콘솔에서 다음 명령어를 통해 계정을 unlock 한 이후 다시 시도해보시기 바랍니다.

> personal.unlockAccount(address, "password", 99999)
(99999초동안 address에 해당하는 계정을 unlock)

답변 감사드립니다. 하지만 unlock 을 해도 결과는 같습니당 ㅜㅜ

> subbridge.parentOperator
"0x6f2d570492f1786ca538cacfd43b2360a468fc17"
> subbridge.childOperator
"0x60d2c167ad673ddeef4f3a734f1a14963e476d7a"
> subbridge.parentOperatorBalance
11922330000000000000
> subbridge.childOperatorBalance
99999999920000000000
> personal.unlockAccount('0x60d2c167AD673DDEef4f3A734f1a14963e476d7A', "비밀번호생략")
true
> personal.unlockAccount('0x6f2D570492F1786Ca538CaCfD43b2360A468fc17', "비밀번호생략")
true
> subbridge.deployBridge()
Error: no contract code after deployment
    at web3.js:3276:20
    at web3.js:6450:15
    at web3.js:5214:36
    at <anonymous>:1:1

>

@sooyoung.kim 안녕하세요,

우선 subbridge.deployBridge()를 사용해서 gas값을 조정할 수는 없습니다.
Klaytn repository에 Bridge.sol파일이 있습니다. 혹시, 이걸로 배포 해보시겠어요?

감사합니다.

2 Likes

주신 sol 파일로 직접 배포를 했습니다 도움 감사드립니다

3 Likes