해결된 질문
작성
·
397
0
트랜잭션을 일으킬때 전송되는 input data가 현재 0x32d0c15f0000000000000000000000000000000000000000000000000000000000000002eca095ec9ca4ec84b1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004
이런식으로 제가 따로 정하지 않은 값이 전송되고있는데요.
이값이 어디서 생성되어서 전송되는지도 모르겠습니다.
그리고 이러한 값을 제가 원하는 값으로 바꿔서 전송하고 싶습니다.
어디에서 손을 보면될까요?
전송시에 메타마스크 자체내에서 input data를 임의로 변경하려고해도,
그냥 계정끼리 일반 전송시에는 수정이 가능하나, 저희가 만든 web을 통해서 (제출 버튼클릭) 브라우징된 메타마스크에서는 수정이 불가능하네요.
도와주세요!
답변 4
1
inputdata를 통해 EVM에서 어떤 함수를 실행시키고 어떤 인자를 받는지에 대한 확인하는 용도로 사용한다면
0x32d0c15f 부분은 제가만든 함수를 식별하는것이니 바꿀수 없다는 것이 되고,
결국 inputdata 부분은 제가 조작이 불가능 하다는 부분인가요?
조작은 할 수 있지만 안하시는게 나아요. 코드도 복잡해질뿐더러 조작하는 순간 그 트랜잭션을 evm이나 컨트랙에서 이해를 못하게 되거든요. (이게 제일 큰 이유임)
에더 송금같은 단순한 기능은 메타마스크의 hex data 필드를 통해 input data를 내 마음대로 보낼 수가 있지만 함수를 통한 트랜잭션은 input data가 evm이 인식할 수 있도록 데이터가 상황에 맞게 생성되기 때문에 케이스가 좀 다릅니다.
좋은 궁금증이지만 결론적으로는 변경하실라고 하지 마세요~ 메세지를 체인에 올려서 무결성을 확인하는 방법은 log나 상태변수에 저장한걸 불러오는걸로도 충분합니다~
0
0
(공개범위를 잘못 설정해서 재작성합니다.)
답변 주셔서 감사합니다.
네, hex 방식으로 바뀌어서 전송되는것은 확인했습니다.
초반 강의에서 sejong과 같은 이름 문자열을 체인에 넣고 그것을 불러냈을때 나오는 값(hex)들을
hex -> plain으로 변환해보고 sejong이 출력되는것을 봤엇거든요.
제가 궁금한점이 강사님께 제대로 전달이 되지 않은것같은데요.
inputdata를 통해 EVM에서 어떤 함수를 실행시키고 어떤 인자를 받는지에 대한 확인하는 용도로 사용한다면
0x32d0c15f 부분은 제가만든 함수를 식별하는것이니 바꿀수 없다는 것이 되고,
결국 inputdata 부분은 제가 조작이 불가능 하다는 부분인가요?
제가 궁금한점은,
이더리움 체인에 제가원하는 메시지를 올리고 싶은데,
Ropsten에 등록하는 inputdata를 제가 원하는 메시지를 hex화 하여 등록하는 방법이 없는지 궁금합니다.
말이 조금 뒤죽박죽이 되었는데요.
만약 제가
sejongjjang이란 메시지를 체인에 올려서 무결성을 확보하고 싶어요.
그러면
sejongjjang을 bytes32방식으로 변경
(sejongjjang -> hex화 / sejongjjnag -> 0x12345678이라고 가정)
0x12345678은 체인에 등록이 되었고, 이더스캔으로 확인이 가능. 즉 이더스캔에 hex화된 sejongjjang이 각인 된거임
이 상황을 구현해보고 싶습니다.
http://www.hashedpost.com/2018/04/hashed-report-4-23.html
이런식으로 저도 웹페이지에서 받은 정보를 스마트 컨트랙트를 통해서 체인에 올린뒤
그것을 이더스캔에서 다른사람들이 확인하게 하고 싶거든요.
다시 한번 요약하자면
만약 sejong이라는 메시지를 웹페이지에서 입력받으면
hex화 한 sejong인 0xc2Vqb25n
을 inputdata로 메타마스크를 통해 넘겨서 이더체인에 등록하고 싶습니다.!
다른 구글링한 정보를보면, 그냥 metamask에서 inputdata를 직접 입력해서 전송하던데
저희 강의에서는 해당 inputdata를 수정이 불가능하더라구요.
(트랜잭션을 전송할 때 web3.js가 백그라운드에서 함수이름, 함수 인자들을 한 패키지로 묶어서 트랜잭션의 데이터 필드로 넘기는 겁니다. 그래야 이더리움 가상 머신에서 무슨 함수를 실행시켜야하고 어떤 인자들을 받는지 알 수 있어요.)
왜 그런지 몰라서 고민을 좀했는데, 이 이유 때문에 안되는것인지를 이제 알았고,
이제 그러면 해당 inputdata를 어떻게 넘길수 있을지가 궁금합니다.!
제가 질문하고자 하는 부분을 명확히 하고싶어서 글이 길어졌습니다..
질문이 너무 길어서 불편하지 않으실지 모르겟네요.
0
이게 EVM에서 스마트 계약이랑 소통할라고 보내는 데이터에요. 트랜잭션을 전송할 때 web3.js가 백그라운드에서 함수이름, 함수 인자들을 한 패키지로 묶어서 트랜잭션의 데이터 필드로 넘기는 겁니다. 그래야 이더리움 가상 머신에서 무슨 함수를 실행시켜야하고 어떤 인자들을 받는지 알 수 있어요.
처음 0x가 이 값이 hexadecimal이라는걸 알려주는거구요
그다음 8 바이트가 (32d0c15f) 함수 식별하는 부분이고
나머지가 함수 인자들을 밝히는 부분입니다.