Baobab과 service chain 간 ERC20 token value transfer가 동작하지 않아 문의 드립니다

안녕하세요?
baobab chain과 service chain 간 ERC20 token valueTransfer 기능 확인 중 전송이 정상적으로 이루어지지 않아 문의를 드리게 되었습니다.

아래 메뉴얼을 참조하여 설정하였습니다.

테스트 코드는 메뉴얼에 링크된 것을 사용하였습니다. (deploy_and_transfer.tar.gz)

증상은 transfer.js를 실행할 때 마다 conf.en.sender의 balance는 100씩 차감되는데
alice의 balance는 증가되지 않습니다.

아래는 제가 설정한 내용들을 나열해보았습니다.

  1. kscn에서 확인한 parentOperator, chileOperator address
    • parentOperator: 0xc67fe5f067dc6a37023e1f5c983d8571986be502
    • childOperator: 0x45da8489741d86c1267328f50ffb5cd4ea6d876c
  2. baobab wallet에서 생성한 address
    • 0xab3eaedca89561e3836d37a0cdc961a84c766778
    • private key (baobab wallet에서 확인)

deploy_conf.json 수정한 내용
{
“scn” : {
“ip”: “SCN IP”,
“port”: “SCN PORT”, // 8551로 설정되어 있습니다.
“key”: “testkey1”, // homi-output/keys_test/testkey1 의 내용을 넣었습니다.
“operator”: “0x45da8489741d86c1267328f50ffb5cd4ea6d876c” // kscn의 childOperator 주소를 넣었습니다.
},
“en” : {
“ip”: “baobab EN IP”,
“port”: “baobab PORT", // 8551 입니다.
“key”: “0xab3eaedca89561e3836d37a0cdc961a84c766778의 private key”, // baobab wallet에서 생성한 주소의 private key를 넣었습니다.
“operator”: “0xc67fe5f067dc6a37023e1f5c983d8571986be502” // kscn의 parentOperator 주소를 넣었습니다.
}
}

deploy.js 를 실행하니 insufficient gas error가 발생하여 확인해본 결과 testkey1에 해당하는 주소에 10ston에 해당하는 klay밖에 없어서 발생한 문제였습니다.
testkey1에 해당하는 주소에 10KLAY를 전송한 후 다시 deploy.js를 실행하니 정상적으로 실행되었습니다.

deploy.js를 수행하고 나온 command

subbridge.registerBridge
subbridge.subscribeBridge
subbridge.registerToken

3개를 kscn console에서 모두 수행하였습니다.

이후 transfer.js를 실행하니 위와 같이 alice의 account로 token이 전송되지 않는 문제가 발생합니다.

transfer.js에서 확인한 conf.en.sender는 baobab wallet에서 생성한 주소 (0xab3eaedca89561e3836d37a0cdc961a84c766778) 였습니다.

그리고 requestValueTransfer transaction receipt를 출력한 결과도 아래에 추가하였습니다. status는 true로 나옵니다.


{
  blockHash: '0x102ecfec041a6b1ff5d8dc6696d3a44e1f3d3c92b7d1a6110d27033ae6fe37e4',
  blockNumber: 63967020,
  contractAddress: null,
  from: '0xab3eaedca89561e3836d37a0cdc961a84c766778',
  gas: '0x989680',
  gasPrice: '0x5d21dba00',
  gasUsed: 95576,
  input: '0xabe6ad8c0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000c40b6909eb7085590e1c26cb3becc25368e249e9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000',
  logsBloom: '0x00000000080000008000000000000000002000000040000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000010000008000000000000000000000000000000000000000000000000020000000000000000000800000200000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000008000000000000000000000000000000000000002000000000000000000000008000000000000000000000400100020000004080000000000000000000000000000000000000000001000000000000000',
  nonce: '0x3e',
  senderTxHash: '0x3852a911f62cc84d699ff5ebca54d4f7b3d3743e0965803621c6691bf933ba49',
  signatures: [
    {
      V: '0x7f5',
      R: '0x6d20ad5c570619c765f0c4326ec938482b7ab00540bb6389446c6074814806a',
      S: '0x75e7b2d6c478331fad79e1818447c95d5a8ccbf18e87ea9e8e8c6ee83300f53e'
    }
  ],
  status: true,
  to: '0x1551b70fdef80bfc2addebc244dac294852ad1b9',
  transactionHash: '0x3852a911f62cc84d699ff5ebca54d4f7b3d3743e0965803621c6691bf933ba49',
  transactionIndex: 0,
  type: 'TxTypeSmartContractExecution',
  typeInt: 48,
  value: '0x0',
  events: {
    '0': {
      address: '0xA90068C6e25491E47D7469546E0De3Cb94615685',
      blockNumber: 63967020,
      transactionHash: '0x3852a911f62cc84d699ff5ebca54d4f7b3d3743e0965803621c6691bf933ba49',
      transactionIndex: 0,
      blockHash: '0x102ecfec041a6b1ff5d8dc6696d3a44e1f3d3c92b7d1a6110d27033ae6fe37e4',
      logIndex: 3,
      id: 'log_abcae006',
      returnValues: Result {},
      event: undefined,
      signature: null,
      raw: [Object]
    },
    Transfer: [ [Object], [Object], [Object] ]
  }
}

도움 주시면 감사하겠습니다.

감사합니다.

안녕하세요?

글 내용 중 아래 부분을 보고 질문이 생겨서 글올립니다.

Klaytn 서비스체인에 대한 토큰 표준

서비스체인은 Klaytn의 메인 블록체인 네트워크에 기반을 두는 Klaytn의 사이드체인을 의미합니다. 서비스체인을 구현할 때, 주 체인과 서비스체인간의 가치 전송을 지원하기 위해 특별한 유형의 컨트랙트가 사용됩니다. 이 컨트랙트는 현재 개발 중에 있으며, 준비가 완료되면 Klaytn 서비스체인을 위한 토큰 스펙이 KlaytnDocs에 제공될 것입니다.

혹시 chain간 token transfer를 하려면 (현재 개발 중인) 전용 토큰 컨트랙트로 해야 하는건지요?

안녕하세요?

위 체인간 valueTransfer 건 과 관련하여, klaytnscope로 예전에 동작했던 transaction과 비교해보고 있는데
동작하는 transaction은 requestValueTransfer transaction 발생 이후에 bridge contract에서 handleERC20Transfer() transaction이 발생하는데,
제가 test 하고 있는 transaction에서는 bridge contract에서 아무런 transaction이 발생하지 않고 있습니다.

정상동작 transaction:

비정상 transaction:

살펴봐주시면 감사하겠습니다.

안녕하세요

현재 hlib님이 재기해주신 덕분에 문제는 인지하고 있으나 팀내에 리소스가 부족하여 대응이 늦어지고 있어 죄송합니다.
여유가 생기는 대로 바로 진행하도록 하겠습니다.

감사합니다.

1 Like

안녕하세요 @hlib님, 오래 기다리게 해서 죄송합니다.

hlib님께서 언급해주셨듯 예제 코드의 bridge 및 sc_token의 abi, bin이 업데이트되어 있지 않아, klaytn 코드와 호환되지 않아 생기는 문제였습니다.

네개의 파일을 다음 파일을 복붙하여 수정 부탁드립니다. 글자 수 제한으로 다음 파일에서 참조해주시면 감사하겠습니다.

https://raw.githubusercontent.com/klaytn/klaytn/bdd83703aee689733d50b55e497ce358b86a1924/contracts/bridge/Bridge.go

Bridge.abi: 위 파일 Bridge.go에 선언된 const BridgeABI 복붙
Bridge.bin: 위 파일 Bridge.go에 선언된 const BridgeBin 복붙

https://github.com/klaytn/klaytn/blob/dev/contracts/sc_erc20/sc_token.go

ServiceChainToken.abi: https://github.com/klaytn/klaytn/blob/bdd83703aee689733d50b55e497ce358b86a1924/contracts/sc_erc20/sc_token.go#L5402 복붙
ServiceChainToken.bin: https://github.com/klaytn/klaytn/blob/bdd83703aee689733d50b55e497ce358b86a1924/contracts/sc_erc20/sc_token.go#L5408 복붙

참고로, 수정내용은 klaytn 소스코드의 klaytn/contracts/bridge/Bridge.go, klaytn/contracts/sc_erc20/sc_token.go를 참고하였습니다.

추가적으로, 동작되지 않을 경우, deploy.js에 다음 코드를 삽입하여 동작해보시길 바랍니다. 위치는 console.log로 브릿지 api 호출 부분을 출력하기 직전에 삽입하시면 됩니다.

    // charge bridge contracts without event
    await conf.scn.newInstanceBridge.methods.chargeWithoutEvent().send({from:conf.scn.sender, value: 100000000000, gas: 1000000000})
    await conf.en.newInstanceBridge.methods.chargeWithoutEvent().send({from:conf.en.sender, value: 1000000000000, gas: 1000000000})

    console.log(`subbridge.registerBridge("${conf.scn.bridge}", "${conf.en.bridge}")`)
    ...

또한, transfer 보낸 뒤 alice 값이 업데이트가 되지 않으면, 조금만 더 기다려보신 뒤 직접 alice의 balance를 확인해주시면 좋을 것 같습니다. 1분 이상이 지나도 업데이트 되지 않을 경우 질문 주시면 감사하겠습니다.

1 Like

친절하고 자세한 답변 정말 감사드립니다.