2017-12-14 2 views
0

Ich erstelle einen Dapp, um das Eigentumsrecht des Vertrags von einer Adresse auf eine andere mit testrpc zu übertragen. Ich stehe jedoch immer wieder vor diesem Problem. Ich habe versucht, die Methode sentransaction zu verwenden, um diese Besitzänderung durchzuführen. Vielleicht rufe ich den Austausch auf eine falsche Art und Weise an. Solidity Version 0.4.4 web3 "Version": "0.20.2"Eigentumsübertragung web3

web3.js:3127 Uncaught Error: VM Exception while processing transaction: invalid opcode 
at Object.InvalidResponse (web3.js:3127) 
at RequestManager.send (web3.js:6332) 
at Eth.send [as sendTransaction] (web3.js:5066) 
at SolidityFunction.sendTransaction (web3.js:4122) 
at SolidityFunction.execute (web3.js:4208) 
at transferOwnership (luxcure_manu.html:309) 
at HTMLButtonElement.onclick (luxcure_manu.html:378 

Voll Solidität Vertrag als der noch.

pragma solidity ^0.4.4; 

    // TODO: Hash of the cert through IPFS Hash 
    // Transfer ownership of smart contract 
contract LuxSecure { 
address public contract_owner;   //Manufacturer/owner 
//string public current_owner; //Current Owner of good 
bytes32 public model;   //Model 
mapping(uint => address) public owners; //list of owners 
uint256 public owners_count; 
bytes32 public status;   // (Public(Owned by no one), Private(Bought by another entity),stolen(Stolen from public or private)) 
bytes32 public date_manufactured; //Time 

// Set manufacturer of the Good RUN ONCE ONLY 
function manufacturer() public{ 
    if(owners_count == 0){ 
    contract_owner = msg.sender; 
} 
} 

//Modifier that only allows owner of the bag to Smart Contract AKA Good to use the function 
modifier onlyOwner(){ 
    require(msg.sender == contract_owner); 
    _; 
} 
// Add a new product to the blockchain with a new serial 
function addNewGoods(bytes32 _model,bytes32 _status, bytes32 _date_manufactured) public returns(bool made) {//Declare Goods struct 
setOwner(msg.sender); 
model = _model; 
status = _status; 
date_manufactured = _date_manufactured; 
return true; 
} 

//This function transfer ownership of contract from one entity to another 
function transferOwnership(address _newOwner) public onlyOwner(){ 
    require(_newOwner != address(0)); 
    contract_owner = _newOwner; 
} 

//Set the KEY to uint256 and VALUE owner Ethereum Address 
function setOwner(address owner)public{ 
    owners_count += 1 ; 
    owners[owners_count] = owner; 
} 

//Get the previous owner in the mappings 
function previousOwner()constant public returns(address){ 
    if(owners_count != 0){ 
    uint256 previous_owner = owners_count - 1; 
    return owners[previous_owner]; 
} 
} 

// Getter Methods 
function getManufacturer() constant public returns(address){ 
    return contract_owner; 
} 

function getCurrentOwner() constant public returns(address){ 
    return owners[owners_count] ; 
} 

function getOwnerCount() constant public returns(uint256){ 
    return owners_count; 
} 

function getModel() constant public returns(bytes32){ 
    return model; 
} 

function getStatus() constant public returns(bytes32){ 
return status; 
} 

function getDateManufactured() constant public returns(bytes32){ 
    return date_manufactured; 
} 

}// end of LuxSecure 

Javascript um die Übertragung des Eigentums

function transferOwnership(){ 
var account_to_transfer = document.getElementById("ethereumaddress").value; 
contract.transferOwnership(account_to_transfer,{ 
    from:web3.eth.accounts[0], 
    gas:4000000 
}); 
} 
+0

Können Sie den vollständigen Vertrag buchen? Welche Version von web3js benutzt du? –

+0

Weitere Informationen zum Vertrag und web3js hinzugefügt –

Antwort

0

ich einen bestimmten Fehler in Ihrem Code nicht sehen, auszuführen. Vielleicht eine schlechte Formatierung auf der Vorderseite, kann aber nicht sicher raten, da wir hier teilweise vorne sind.

Ich weiß nicht, ob es eine Hilfe sein wird, aber manchmal, mit Trüffel, kam es mir vor, einige Funktionen zu haben, die schlechten Opcode von testrpc/ganache-cli zurückgaben, während kein offensichtlicher Fehler im Code war.

Löschen der ABI, Neukompilieren der Smart-Verträge, um eine brandneue ABI zu erhalten und dann die Verträge neu zu verteilen, löste das Problem.

+0

Haben Sie versucht, dieses Problem in einem privaten Netzwerk zu lösen? Dies ist ein inhärentes Problem mit TestrPC? –

+0

ich immer zuerst in einem lokalen privaten Netzwerk zuerst dann auf einem Testnet und nur einmal der Code vollständig getestet Bereitstellung auf dem Hauptnetz. Die Opcode-Fehler, über die ich sprach und sprach, waren normalerweise bei der Bereitstellung im privaten lokalen Netzwerk. Ich weiß nicht, ob testrpc oder der ABI fehlgeschlagen ist, aber das Löschen des ABI und das Neugenerieren der Datei mit dem Kompilieren mit Trüffel löste das Problem. – Asone

Verwandte Themen