• 카테고리

    질문 & 답변
  • 세부 분야

    블록체인

  • 해결 여부

    해결됨

예제 소스 질문 입니다.

21.08.06 21:03 작성 조회수 315

1

안녕하세요! 저번에 문의한 내용에 대한 답변 너무 너무 감사합니다.
이번에도 하나 더 질문 드립니다.
로컬pc에서 가나슈어를 이용하여 테스트하면 정상적으로 동작합니다.
하지만 서버에 geth설치 후 실행하면 3번째 setTx를 이용하여 구현한 부분이 에러가 나네요!
이것저것 로그를 찍어보고 있는데요
 Returned error: invalid sender <-- 이런 오류가 발생되네요.. 혹시 어떤 오류 인지 아시는지요~
전체 오류 로그
txCount ==>113
from ==>0xE9bb502a7150d5326bE9a16BAA9aada75a644c4b
privateKey ==>
������v��     �t��ʥ%m�%� }��<
address ==>0xd617FB0b6ba3f3855c903a73225DCbD4511E9Fd1
data ==>0x60fe47b100000000000000000000000000000000000000000000000000000000000085c2
verifySignature =>true
XshellError: Returned error: invalid sender
    at Object.ErrorResponse (/home/dapp_tx/node_modules/web3-core-helpers/lib/errors.js:28:19)
    at /home/dapp_tx/node_modules/web3-core-requestmanager/lib/index.js:302:36
    at XMLHttpRequest.request.onreadystatechange (/home/dapp_tx/node_modules/web3-providers-http/lib/index.js:98:13)
    at XMLHttpRequestEventTarget.dispatchEvent (/home/dapp_tx/node_modules/xhr2-cookies/dist/xml-http-request-event-target.js:34:22)
    at XMLHttpRequest._setReadyState (/home/dapp_tx/node_modules/xhr2-cookies/dist/xml-http-request.js:208:14)
    at XMLHttpRequest._onHttpResponseEnd (/home/dapp_tx/node_modules/xhr2-cookies/dist/xml-http-request.js:318:14)
    at IncomingMessage.<anonymous> (/home/dapp_tx/node_modules/xhr2-cookies/dist/xml-http-request.js:289:61)
    at IncomingMessage.emit (events.js:388:22)
    at endReadableNT (internal/streams/readable.js:1336:12)
    at processTicksAndRejections (internal/process/task_queues.js:82:21) {
  data: null
}
  InternalServerError: Internal Server Error
      at Object.throw (/home/dapp_tx/node_modules/koa/lib/context.js:97:11)
      at setTx (/home/dapp_tx/src/api/eth/eth.controller.js:105:18)
      at runNextTicks (internal/process/task_queues.js:60:5)
      at listOnTimeout (internal/timers.js:524:9)
      at processTimers (internal/timers.js:498:7)
      at async bodyParser (/home/dapp_tx/node_modules/koa-bodyparser/index.js:86:5)

답변 2

·

답변을 작성해보세요.

1

너무 감사합니다.

저도 구글 검색을 통해 여러가지를 시도해봤는데 위 가이드로 다시 시도해보겠습니다.

제가 찾은 답은   "ethereumjs-tx": "^1.3.7", 버전을 내리는 거 였습니다.

버전을 내리고 소스 수정하니 동작하네요.. 답변 너무 너무 감사합니다. 알려주신 방법으로도 다시 해보겠습니다.

감사합니다.

버전을 내리는 것은 바람직하지 않습니다. 이더리움은 주기적으로 하드포크되면서 변경되는 부분들이 생깁니다. ethereumjs도 이렇게 변경된 것들을 반영하여 업그레이드가 되는데 계속 이전 버전을 쓸 수는 없습니다. ethereumjs는 패키지명이 @ethereumjs로 바뀌고 버전이 3.x.x까지 올라간 상태입니다. 

다른 라이브러리도 마찬가지 입니다. 이더리움 트랜잭션 부분도 변경 사항이 생기고 그에 따라서 트랜잭션을 생성해줄 때도 그런 점들을 반영해주어야 할 겁니다. 

네 저도 버전을 내리는건 바람직하지 못하다고 생각합니다. 하도 안되서 구글링을 통해 찾은 답이 내리는거라 해본거에요 알려주신 내용으로도 작업을 했어나 동일한 오류가ㅜ발생되어 몇일 더 해봐야할거 같네요.. 

주말에 하이퍼레저 베수 세팅하느라 더 자세히 하지 못했네요. 선생님의 판테온강의 최고네요!!  판테온 강의 다 보고 베수 세팅 다 했습니다.이제 디앱 트랜잭션 발생하면 실습이 완료 될고 같아요 😀😀

감사합니다 

1

Geth에 직접 테스트하려면 코드를 변경해야 할 것 같습니다. 일단 서버측에서 서명할 때 서명 개인키를 확인해보시고... setTx 에 const privateKey = Buffer.from(...) 부분입니다.

가나슈는 개발용이라서 그런지 모르겠는데 트랜잭션 정보가 부실(?)해도 그냥 처리되는 것 같습니다. 😅 그래서 다음과 같이 변경해줘야 할 듯 싶습니다.

우선 ethereumjs-common 패키지를 설치합니다(deprecated된 패키지이지만 강좌가 만들어진 시점을 기준으로 하겠습니다).

https://www.npmjs.com/package/ethereumjs-common

그리고 eth.controller.js 에 있는 const tx = new ethTx(txObject);  부분을 다음과 같이 수정합니다.

const Common = require('ethereumjs-common').default;
...
const local = Common.forCustomChain(
            'mainnet',
            {
                name: 'local',
                networkId: 444,
                chainId: 444
            },
            'petersburg'
        )
const tx = new ethTx(txObject, {common: local});

전체 소스는 다음 링크를 참조하세요.

https://gist.github.com/swkim109/e3fcdb45cf19aa9c16d9c2ec60a0bb5e