서비스체인에서 bridge contract 배포 문제

kscnd 를 구동하고 baobab 에 연결하였습니다.
앵커링도 성공적으로 진행되었습니다.
그런데 bridge contract 배포 (subbridge.deployBridge() 호출) 시
txError 0x5 가 발생합니다.
gas 가 모자르다는 뜻인데… 어떻게 해결할 수 있을까요?
genesis.json 에서 gasLimit 을 설정할 수는 있을 듯 한데…
그렇게 되면 서비스 체인을 처음부터 다시 시작해야 해서… 이것은 방법이 아닐 듯 하구요…
kscnd 재실행시 gasLimit 을 변경할 수 있는 방법이 있을까요?

또는 subbridge.deployBridge() 호출시 gasLimit 을 올리수 없나요?
여기 찾아 보니… bridge contract (.sol 파일)을 다운 받아 직접 배포 하는 방법이 있다고 하던데…
이럴 경우, childOperator 계정의 Private Key를 알아야 하는데… 이것도 여의치 않을 듯 하구요…
부디 해결 방법을 알려주세요… 서비스 체인을 다시 시작하지 않고 해결할 수 있는 방법을…

다음은 해당 트랜잭션의 receipt 입니다.

{
  blockHash: "0x7295b80261f7598780e8b30296356775b3f98d5734f025e8f6dda7852851438c",
  blockNumber: 796962,
  contractAddress: "0x8c7df62d45edc45401b8127a8fa8bfe3551cea2c",
  from: "0x9c38da6b9a52135eef143a757d54f16d07d2a611",
  gas: "0x4c4b40",
  gasPrice: "0x0",
  gasUsed: 5000000,
  input: "0x60806040...",
  logs: [],
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  nonce: "0x6",
  senderTxHash: "0x8b78301809652e77bdbe2014558444dbc22bd84489c8867114f29dc612d64fa5",
  signatures: [{
      R: "0x6e90f93cdf21c96afb3b0e214b5f77dd38e0ba14796589cee0e31ac21115ef8d",
      S: "0x4fa26609c4a4cd1630aac3a6836666ce452696a684275fab983fefc53b8255a5",
      V: "0x1796"
  }],
  status: "0x0",
  to: null,
  transactionHash: "0x8b78301809652e77bdbe2014558444dbc22bd84489c8867114f29dc612d64fa5",
  transactionIndex: 0,
  txError: "0x5",
  type: "TxTypeLegacyTransaction",
  typeInt: 0,
  value: "0x0"
}

안녕하세요,

위 문제는 컨트랙트 코드 크기에 비해 설정된 가스가 작아서 에러가 발생한것으로 보입니다. subbridge.deployBridge()함수를 사용할경우 디폴트로 설정된 가스가 사용되는데 이 가스는 현재 브릿지 컨트랙트를 저장하기에는 적은 가스량입니다. 현재 이것을 고치기위한 작업이 진행중입니다(Support to adjust default BridgeGasLimit by hqjang-pepper · Pull Request #1287 · klaytn/klaytn · GitHub). 이것이 적용되기전까지는 직접 배포를 하셔야하는데 예제코드를 제공하고있습니다 (GitHub - klaytn/servicechain-value-transfer-examples: Example tutorials for value transfer in service chain). 컨트랙트배포는 오퍼레이터계정으로 하지않아도 됩니다. 참고로 오퍼레이터 계정의 개인키는 data/child_bridge_accountdata/parent_bridge_account 디렉터리에 저장되어있습니다. 서비스체인을 중단하지않고 배포를 해보려면 배포할 계정의 개인키와 충분한 클레이가 있어야 됩니다.

2개의 좋아요

임시 방편으로 오퍼레이터 계정으로도 해당 문제를 해결할 수 있는 방법을 알려드리겠습니다.

  1. github에서 klaytn repository 다운로드
  2. node/sc/bridge_accounts.go 의 38번째 줄 쯤을 보면 하드코딩되어있는 5000000 값을 원하는 값으로 변경
    const (
    DefaultBridgeTxGasLimit = 5000000
    )
  3. make kscn으로 kscn 바이너리 빌드
  4. 노드 중지 kscnd stop
  5. 새로 빌드한 kscn으로 바이너리 교체 후 재실행
3개의 좋아요