저는 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() 메소드를 사용해야하는 프로젝트에 대해 생각하고 있습니다.
을 아담과 코드를 붙여 감사합니다'VAR contracAddress = "0XXXXXXXXX은";'당신이'transactionObject'과 같이 빈'to' 필드가있는 결과. –
아담 감사합니다. 실제 코드에서 실제 주소는 내가 여기에 0xXxxx를 썼다는 것을 증명합니다. 구멍 번호 복사를 피하십시오. – absoluteBeginner
값을 언급하지 않았습니다. 나는 변수 이름을 언급하고 있었다. "contractAddress"에 t가 누락되었습니다. transactionObject에서 설정되면 철자가 정확합니다 (따라서 다른 변수). –