2017-12-13 14 views
0

저는 Ethereum/Solidity/Web3.js와 잘 어울립니다. 비공개 체인의 배포 된 계약에서 함수를 실행하기 위해 web3.js web.eth.sendsendTransaction() 메서드를 사용하려고합니다.web3.js 1.0과 Solinity 사이의 데이터 미스 매치

내가 실행하려고하는 기능입니다 : 나는 = 1000 firstNumber 및 secondNumber = 2000 다음 abiByteCodes을 설정하면

var contracAddress="0xXXXXXXXX"; 
var contractABI=[{"constant":false,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"multiplica","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},...]; 
var functionABI=$.grep(contractABITercero,function(metodo,index){ return metodo.name=='multiplica';}); 
functionABI=abiDelaFuncion[0]; 
var abiByteCode= web3.eth.abi.encodeFunctionCall(functionABI,[document.getElementById('firstNumber').value,document.getElementById('secondNumber').value]); 
var transactionObject={from:"0xxxxxxxxxx",to:contractAddress,data:abiByteCode, gas:10000000}; 
web3.eth.sendTransaction(transactionObject, function(error,hash){......}); 

:

contract Matematicas{ 
    uint256 ultimaSuma; 
    uint256 ultimaMultiplicacion; 
    uint256 contador; 
    uint256 factorA; 
    uint256 factorB; 
    uint256 sumandoA; 
    uint256 sumandoB; 
    bytes datosMensaje;... 

    function multiplica(uint256 a, uint256 b) public{ 
     datosMensaje=msg.data; 
     factorA=a; 
     factorB=b; 
     ultimaMultiplicacion=(a*b); 
    } 
... 
} 

나는 다음과 같은 자바 스크립트 코드를 runnig 미스트 브라우저에서 multiplica 전화 될 일이 :

0x38e836df00000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000 7d0

0x38e836df는 fuction 서명의 소유자입니다. 확인

03E8 1000 (firstNumber) 16 진수 오른쪽

07d0는 2000 헥스이다 (secondNumber)

그러나 블록 사슬에 저장된 데이터이다

datosMensaje : 0x38e836df0000000000000000000000000000000000000000000000000000000000 9e0 3e80000000000000000000000000000000000000000000000000000000000 9e0 7d0

factorA : 8520680 (0x8203E8)

factorB : 8521680 (0x8207D0) 내가 잘못하고있는 중이 야 무엇

?

Windows 10 64 비트 데스크탑에서 geth 1.7.3 및 Mist 0.9.2를 사용하고 있습니다.

감사합니다.

P. 새로운 web3.eth.Contract (contractABI, contractAddress)를 통해 계약을 인스턴스화하는 것과 같은 계약 함수를 호출하는 다른 방법이 있지만 sendTransaction() 메소드를 사용해야하는 프로젝트에 대해 생각하고 있습니다.

+0

을 아담과 코드를 붙여 감사합니다'VAR contracAddress = "0XXXXXXXXX은";'당신이'transactionObject'과 같이 빈'to' 필드가있는 결과. –

+0

아담 감사합니다. 실제 코드에서 실제 주소는 내가 여기에 0xXxxx를 썼다는 것을 증명합니다. 구멍 번호 복사를 피하십시오. – absoluteBeginner

+0

값을 언급하지 않았습니다. 나는 변수 이름을 언급하고 있었다. "contractAddress"에 t가 누락되었습니다. transactionObject에서 설정되면 철자가 정확합니다 (따라서 다른 변수). –

답변

0

무수한 후 시간 나는 이것이 리믹스 IDE가 디버그 탭에 값을 표시하는 방법의 오류로 인한 것임을 깨달았습니다. web3.js 버전 1.0 메서드 getStorageAt (address, key)를 사용하여 블록 체인에서 데이터를 복구하는 경우 예상 값을 얻습니다.

는 당신이 첫 번째 줄에 "contractAddress을"맞춤법이 틀린, 당신은 당신이 복사 가정